Apparatuses, methods, and systems for an API call abstractor

ABSTRACT

A social networking application manager (“SNAM”) initializes a set of modules for an application with their most updated versions. SNAM then iterates through the following operations. SNAM obtains the specification attributes for an updated version of the application. SNAM then obtains specification attributes for each module. SNAM compares the specification attributes of the modules with the specification attributes of the application to identify incompatible specification attributes. SNAM identifies the least compatible module. And SNAM replaces the least compatible module with a version of the module that results from decrementing a version number for the module. This iteration continues until there are no more incompatible specification attributes.

PRIORITY CLAIM

This application is a continuation of U.S. patent application Ser. No.12/885,092 filed on Sep. 17, 2010, entitled “APPARATUSES, METHODS ANDSYSTEMS FOR AN API CALL ABSTRACTOR”, which claims priority under 35 USC§119 for U.S. provisional patent application Ser. No. 61/277,978 filedSep. 30, 2009, entitled “FRAMEWORK TO ABSTRACT SOCIAL NETWORK APICALLS,” and U.S. provisional patent application Ser. No. 61/277,950filed Sep. 30, 2009, entitled “SOCIAL NET APPLICATIONS UPDATEDYNAMICALLY AS CODE IS CHECKED-IN.”

This application claims priority to all of the aforementionedapplications and the entire contents of the aforementioned applicationsare herein expressly incorporated by reference.

FIELD

The present invention is directed generally to apparatuses, methods, andsystems for social networking, and more particularly, to APPARATUSES,METHODS AND SYSTEMS FOR AN API CALL ABSTRACTOR.

BACKGROUND

Software application developers often rework existing softwareapplication code, and create new versions of their software applicationcode. Application programming interfaces (“APIs”), such as those offeredto application developers by social networking platform hosts, arecreated to allow programmers and users to access various libraries ofsoftware code. Many social networking systems are based on various webprogramming codes and APIs.

SUMMARY

The APPARATUSES, METHODS AND SYSTEMS FOR A SOCIAL NETWORKING APPLICATIONMANAGER (“SNAM”) provide live reconciliation of code updates tomulti-user social networking applications in highly dynamic buildenvironments.

In one embodiment, a processor-implemented API call abstraction methodis disclosed, comprising: obtaining programming code for an application;parsing the obtained programming code to identify instructions in theprogramming code; identifying an application programming interface callin the programming code based on parsing the obtained programming code,the application programming interface call including an input string;determining that the identified application programming interface callrequires a pre-registered bundle to replace the input string; providinga request to register a new bundle including the input string; obtainingan indication that the new bundle has been registered; obtaining abundle identification corresponding to the new bundle, upon obtainingthe indication that the bundle has been registered; and replacing theinput string in the application programming interface call with thebundle identification.

In one embodiment, a processor-implemented application updating methodis disclosed, comprising: obtaining an indication to check whether togenerate an updated version of an application; obtaining a moduledependency graph for a current version of the application; identifyingcurrent module version numbers for one or more modules in the moduledependency graph for the current version of the application; obtaining,for the modules in the module dependency graph, module version numbersfor updated module versions stored in a code database; obtainingcompatibility specifications for the current version of the applicationand the updated module versions stored in the code database; analyzingthe compatibility specifications for the current version of theapplication and the updated module versions; determining that theupdated version of the application can be generated using the updatedmodule versions stored in the code database, based on analyzing thecompatibility specifications for the current version of the applicationand the updated module versions; obtaining an updated module version forone of the modules in the module dependency graph of the current versionof the application; and generating the updated version of theapplication using the obtained updated module version.

BRIEF DESCRIPTION OF THE DRAWINGS

The accompanying appendices and/or drawings illustrate variousnon-limiting, example, inventive aspects in accordance with the presentdisclosure:

FIG. 1 is of a block diagram illustrating various Social NetworkingApplication Manager (“SNAM”) components and/or affiliated entitiesinvolved in live reconciliation of code updates in some embodiments ofthe SNAM;

FIG. 2 is of a block diagram illustrating aspects of live reconciliationof code updates in some embodiments of the SNAM;

FIG. 3 is of a data flow diagram illustrating aspects of applicationprogramming interface (“API”) call abstraction in some embodiments ofthe SNAM;

FIGS. 4A-C are of logic flow diagrams illustrating aspects of API callabstraction in some embodiments of the SNAM;

FIGS. 5A-B are of block diagrams illustrating aspects of API callabstraction request management in some embodiments of the SNAM;

FIG. 6 is of a data flow diagram illustrating aspects of socialnetworking application updating in some embodiments of the SNAM;

FIGS. 7A-D are of logic flow diagrams illustrating aspects of socialnetworking application updating in some embodiments of the SNAM;

FIG. 8 is of a data flow diagram illustrating aspects of socialnetworking application update deployment in some embodiments of theSNAM;

FIGS. 9A-C are of logic flow diagrams illustrating aspects of socialnetworking application update deployment in some embodiments of theSNAM; and

FIG. 10 is of a block diagram illustrating embodiments of the SNAMcontroller.

The leading number of each reference number within the drawingsindicates the figure in which that reference number is introduced and/ordetailed. As such, a detailed discussion of reference number 101 wouldbe found and/or introduced in FIG. 1. Reference number 201 is introducedin FIG. 2, etc.

DETAILED DESCRIPTION Social Networking Application Manager (SNAM)

FIG. 1 is of a block diagram illustrating various Social NetworkingApplication Manager (“SNAM”) components and/or affiliated entitiesinvolved in live reconciliation of code updates in some embodiments ofthe SNAM. A variety of other compositions and arrangements of SNAMcomponents and/or affiliated entities may be used in alternativeembodiments of the SNAM as is further discussed in FIG. 10.

In some implementations, the SNAM may include a developer system 100.Developer system 100 may provide social networking applications (e.g.,multi-user online games) for users 110. The users may interact with thedeveloper system via a variety of clients 109. In some implementations,the developer system may interact with the users and/or clients via ahosting server 108. For example, the hosting server 108 may be includedwithin the computing infrastructure of a social networking websiteproviding social networking services for the users. In someimplementations, the hosting server 108 may provide one or moreapplication programming interfaces (“APIs”) for the developer system tointerface with the hosting server and with any users associated with thehosting server and/or social networking website for which the hostingserver provides one aspect of computing infrastructure. In someimplementations, the hosting server may provide a wide variety of APIsfor the developer system 100. For example, the hosting server mayprovide APIs via which the developer system may obtain/modify/appenduser profile information, user data (e.g., e-mail, text messages, blogposts, microblogs, tweets, status messages/updates), user associatedmedia content (e.g., audio/video files etc.), RSS and/or other newsfeeds, social graph information pertaining to users of a socialnetworking service/website hosted by the hosting server, and/or thelike.

In some implementations, developer system 100 may include one or moreapp servers 107. An app server may provide one or more social networkingapplications (e.g., multi-user online games) for the users and/orclients. For example, the app server may provide a custom client-sideapplication for a client. The client-side application may execute on aclient of a user. In some implementations, the client-side applicationmay communicate and/or exchange data/media with an app server includedin the developer system to provide social networking applicationfunctionality for the user. In other implementations, a generic webbrowser, telnet, command-line and/or other applicationinterface/environment may be available on a client, and may interfacewith an app server included in the developer system. In someimplementations, an app server may utilize one or more APIs provided byhosting server to communicate with the client/user. The app server mayalso utilize the APIs provided by the hosting server toobtain/modify/append user profile information, user data (e.g., e-mail,text messages, blog posts, microblogs, tweets, status messages/updates,message/calls, data structures/parameters passed as encapsulated and/ordistributed objects, and/or the like), user associated media content(e.g., audio/video files etc.), RSS and/or other news feeds, socialgraph information pertaining to users of a social networkingservice/website hosted by the hosting server, and/or the like. In someimplementations, the developer system may include one or more databases,including a user profile database 104 a, app database 104 b. The appdatabase 104 b may store one or more applications developed forexecution on the app servers and/or on clients. In some implementations,an app server with which a client is interacting may select anapplication stored in the app database to provide for the client basedon properties of the client (e.g., type of client, location, languagesettings, user preferences, browser locale etc.). The app server maythen obtain the application from the app database and provide the appfor the client. In alternate implementations, an app server may loadonto itself an application from the app database based on the propertiesof the client with which the app server is required to interact. In someimplementations, during interaction of an application executing on aclient with an application executing on an app server, data pertainingto a user and/or client may be generated. For example, an app server maybe executing a multi-user online gaming application in which a userusing a client running a client-side application is taking part. As partof the experience provided by the application executing on the clientand app server, user data (e.g., game state, user messages, user profileupdates, etc.) may be generated. In some implementations, such user datamay be stored in a user profile database 104 a included within thedeveloper system. In some implementations, the app server may utilizedata stored in the user profile database of the developer system and/ordata obtained from the hosting server (e.g., social networking data ofthe user from a social networking website implemented on the hostingserver) to provide various social networking application features forthe user.

In some implementations, the hosting server providing APIs for the appservers of the developer system may require the app servers utilizingthe APIs to adhere to policies and/or regulations imposed by each of theprovided APIs. For example, an API may require that an input string tothe API may only be chosen from a known set of fixed string templates.In some implementations, a fixed input string template including one ormore variable fields and/or text (hereinafter “bundle”) and anidentification tag (“bundle ID”) associated with the bundle may bestored in a bundle database 104 d included in the developer system. Thehosting server APIs may require that any input strings not previouslyused by the developer system be first registered with the hostingserver. Accordingly, in some implementations, the developer system mayinclude a string registry server 106 that interfaces with the hostingserver. The string registry server may accept requests from one or moreentities included within the developer system to register new inputstrings for APIs provided by the hosting server. The string registryserver may then coordinate registration of the new input strings withthe hosting server by communicating with the hosting server. In someimplementations, the string registry server may be disposed incommunication with a string queue database 104 e storing one or morequeues of string registration requests from the entities included withinthe developer system. A bundle database 104 d may also be provided forin the developer system, wherein the bundle database stores informationon bundles that have been previously registered with the hosting server.In some implementations, the string registry server may coordinateregistration of new input strings stored in the string queue databasewith the hosting server, update the bundle database with the results ofregistration of the new input strings with the hosting server, andremove from the queue database requests that have successfully beenserviced from the string queue database.

In some implementations, the applications stored in the app database 104b may be compiled from source code stored in a code database 104 cincluded within the developer system. In some implementations,applications may be compiled from source code in the code database priorto deployment of the application to users and/or clients of thedeveloper system and/or affiliated entities (e.g., social network hostedby hosting server). In alternate implementations, source code from thecode database may be compiled at runtime and/or on-the-fly duringdeployment to users and/or clients. In further implementations,instructions from source code may be read by the app servers (e.g.,line-by-line) directly from the code database and implemented as theyare read by the app servers to provide social networking applicationservices to the users and/or clients. In implementations wherein sourcecode from the code database is compiled prior to run time, suchcompilation may be performed by developer servers 103 included withinthe developer system. In some implementations, a developer server mayobtain source code from the code database for compilation. The sourcecode may include one or more API calls using APIs provided by thehosting server. In such instances of compiling code including API calls,the developer server may query the bundle database for information on abundle corresponding to the input provided to the API call in the code.If a bundle corresponding to the input for the API call in the sourcecode is available in the bundle database, the developer server mayutilize bundle information obtained from the bundle database in thecompilation procedure. If, however, no bundle corresponding to the inputfor the API call in the source code is available in the bundle database,the developer server may submit a request for registration of a newinput string corresponding to the input provided to the API callincluded in the source code to the string queue database. The stringregistry server may coordinate with the hosting server to register thenew input string submitted by the developer server, and upon completionof string registration, the string registry server may notify thedeveloper server of availability of a newly generated bundlecorresponding to the provided new input string stored in the bundledatabase. The developer server may obtain the new bundle, and continuethe compilation procedure using the generated bundle. Upon completingthe compilation procedures, the developer server may store the generatedcompiled application in the app database.

In some implementations, the SNAM may provide social networkingapplication services for a large number of users utilizing a widevariety of client devices/systems. Such client devices may be utilizinga wide variety of operating systems types/versions/builds/service packs,network connection types, connection bandwidths, display screen sizes,web browser environments, browser locales, language and/or otherpersonalization settings, communication interfaces and/or like clientdevice/system preferences/settings. Some client devices may obtainstandalone custom applications (e.g., from the app database via an appserver), while other client devices may utilize modern web technologies(e.g., JavaScript™, Adobe Flash®, HTML5, etc.) via a web browser toprovide social networking application services for the users.Accordingly, in some implementations, the developer system may generate,store and maintain a large number of code modules, code versions,application modules, application versions, module/application dependencygraphs, application/module specifications, compatibility lists, and/orthe like, to provide social networking application services to a broaduser/client audience. In some implementations, the developer system mayinclude a plurality of developers 101 producing software code for a widerange of modules and/or applications designed to satisfy a wide range ofuser preferences and/or operate in a variety of client computingenvironments. The developers may produce such software code at aplurality of workstations 102. In some implementations, thedevelopers/workstations may provide various application/module codesubmissions for the developer servers, using which the developer serversmay compile applications/modules for providing the social networkingapplication services for the users of the hosting server/developersystem. Accordingly, in some implementations, the developer system 100may generate, store, maintain and/or deploy various versions ofdeveloper/workstation-provided software code, modules, applicationsand/or the like at any given time.

FIG. 2 is of a block diagram illustrating aspects of live reconciliationof code updates in some embodiments of the SNAM. In someimplementations, a user 201 may wish to utilize an application module(e.g., render module 202). The user's client may issue a request (e.g.,203) to a server to access the desired application module. In responseto the user's request, the server may provide the requested applicationmodule. The application module (e.g., render module 202) may utilizeother application modules (“dependent application modules”), e.g. A 210,B 212, etc., to provide its designed features for the user. In someimplementations, an application module (“calling application module”),e.g., D 216, may utilize a dependent application module (e.g., C v1 215a) via an application programming interface (“API”) call (e.g., 218).

In some implementations, a software application developer maycontemplate modifications to an application module being utilized by theuser. For example, with reference to FIG. 2, the developer maycontemplate modifications to render module 202, so as to generateupdated render module 205. The developer may contemplate modificationsto an application module for a variety of reasons. For example, thedeveloper may contemplate modifications including, but not limited to,ones that enhance the range of features provided to the user/client,improve the speed/responsiveness of the application module, fix bugsidentified in prior version of code corresponding to the applicationmodule, and/or the like. The developer may input (e.g., manually enter)the contemplated modifications to the code of the module to generate anupdated code module. The developer may provide the updated code moduleto the app facility. In response, the app facility may compile theupdated code module, and generate an updated version of the applicationmodule (e.g., updated render module 205). In some implementations, anupdated version of an application module may utilize a different set ofdependent application modules than the original version of thatapplication module. For example, with reference to FIG. 2, the updatedrender module 205 and original render module 202 both may utilizeapplication module A 210. However, the updated render module 205 mayutilize application module B2 213, while the original render module 202may utilize application module B1 212 instead of application module B2213.

In some implementations, a user may be utilizing an application modulefor which the app facility has generated an updated version. In suchimplementations, the app facility may attempt to transfer the user fromthe user's version of the application module to the updated version. Forexample, the app facility may generate an instance of the updatedversion of the application module (e.g., updated render module 205), andgenerate instances of the dependent application modules (e.g., A 210, B2213) utilized by the updated version. The app facility may issue a newaccess request (e.g., 207) for the updated version of the applicationmodule on behalf of the user, and dynamically establish access for theuser to the updated version. The app facility may then delete 208 anyinstances of outdated versions (e.g., render module 202) of theapplication module and delete instances of any dependent applicationmodules (e.g., B1 212) not being utilized by the updated version of theapplication module. In some implementations, the developer system mayperform such transfer of users from one application module version toanother dynamically (e.g., 230) in real-time, while the user iscontinuously utilizing the multi-user social networking application, asdiscussed further in this disclosure.

In some implementations, a multi-user social networking application maycomprise a plurality of application modules (e.g., 202, 205, 210,212-213, 215 a-c, 216-217). An application module may be designed toexecute within a server and/or client computing environment. In someimplementations, the developer system may compile a plurality ofversions of a single application module (e.g., 215 a-c). In someimplementations, different versions 214 of the same application module(e.g., 215 a-c) may be utilized in different application scenarios. Forexample, with reference to FIG. 2, application module D 216 may utilizeversion 1 (215 a) of application module C. Application module E 217,however, may utilize version 3 (215 c) of application module C. Theversion of an application module utilized in an application scenario maydepend on various factors including, but not limited to: userpreferences (e.g., language, type of user experience such as normal/HDvideo, etc.), client device type, hardware installed on the client,software resources available at the client, the features that theapplication is required to provide for the user, the server computingenvironment, and/or the like.

Application Programming Interface (API) Call Abstraction

FIG. 3 is of a data flow diagram illustrating aspects of applicationprogramming interface (“API”) call abstraction in some embodiments ofthe SNAM. In some implementations, a developer 301 may contemplatemodifications to a code module utilized by a multi-user socialnetworking application. The developer 301 operating workstation 302 mayprovide input code 311 a including such modifications to update such acode module. For example, the developer may input a code moduleincluding commands similar to the exemplary listing provided below. Insome implementations, the input code may include references to othercode/application modules in order to provide the desired capabilities ofthe updated code module. For example, the references may include APIcalls to other code/application modules. An exemplary listingillustrating substantive aspects of including an API call within a codemodule, written substantially in the form of server-side HypertextPreprocessor (“PHP”) script, is provided below:

<?PHP header(‘Content-Type: text/plain’); $message = “{*actor*} uploadeda new video.”; $target_id = 1234567;$hostserver->api_client->stream_publish($message, $target_id); ?>

In some implementations, the input code module may include API calls toAPIs provided by the hosting server 308. In the example listingpresented above, the code input by the developer makes an API call tothe stream_publish( ) module provided by the hosting server $hostserver.The developer may provide one or more inputs for the API along with theAPI call. For example, in the example listing presented above, thedeveloper includes a message string ($message) and a target ID($target_id) as inputs for the API call to the stream_publish( )procedure. In some implementations, the hosting server may provide anAPI for a developer system to post a user-customizable text string asnewsfeed content to a newsfeed of a user of a social networking sitehosted by the hosting server. The developer may include a call to suchan API in the input code module, and provide an input text string (e.g.,$message), a user ID (e.g., $target_id), and values for fields (e.g.,{*actor*}) included in the input text string to the API via the APIcall, such that the API may publish the text string, customized based onthe values for fields provided with the API call, to a newsfeed of auser identified by the provided user ID.

In some implementations, a developer server 303 may obtain the inputcode provided by the developer and/or workstation, and analyze theobtained code in order to compile the code into an application, and/orprepare the code for use at run-time/on-the-fly. In someimplementations, the developer server may parse the input code toidentify API calls within the provided code. An exemplary listing forparsing a code file submitted by a developer to identify API calls,written substantially in the form of PHP commands, is included below inthe discussion with reference to FIGS. 4A-C. Based on parsing the codeupdate provided by the developer, the developer server may identify anAPI call to an API provided by the hosting server within the input codeupdate. The developer server may also identify an input string providedto the API in the API call, based on parsing the input code for inputstrings in a manner similar to that used to identify API calls withinthe input code update. The developer server may extract identified inputstrings from the input code and save them for future processing. Anexemplary listing for extracting input strings and savings the extractedstrings to a results file is included below in the discussion withreference to FIGS. 4A-C. The hosting server may, in someimplementations, require that all input strings provided via API callsto modules provided by the hosting server be pre-registered with thehosting server, wherein pre-registration results in the hosting serverproviding a bundle ID identifying a bundle comprising an input string,and customizable fields associated with the input string. Accordingly,in some implementations, the developer server may, in response toidentifying an input string in an API call to an API provided by thehosting server, generate a query for a bundle ID associated with theidentified input string. For example, the developer server may execute aPHP script that interfaces with a relational database responsive toStructured Query Language (SQL) commands. Exemplary PHP/SQL commands forquerying a database for an identifier stored in a database using aninput string as a search query are include below in the discussion withreference to FIGS. 4A-C. In some implementations, the developer mayquery 311 b a bundle database 304 d for a bundle ID using the generatedquery. The bundle database 304 d may store bundle records with fieldsincluding, but not limited to, a bundle ID, a bundle type, bundlefields, bundle field types, hosting server ID, and/or the like. Uponreceiving the query for the bundle ID associated with the input string,the bundle database may return a query result 311 c including one ormore of the fields stored in the bundle records (e.g., bundle ID).However, if a bundle record corresponding to the input string queriedfor does not exist in the bundle database, the bundle database maygenerate and provide an error message (e.g., a null result) for thedeveloper server.

In some implementations, if the developer server obtains an errormessage from the bundle database indicating that no bundle ID exists forthe input string in the API call, the developer server may generate arequest for a new bundle corresponding to the input string. Thedeveloper server may submit the bundle request 311 d to a string queuedatabase 304 e. For example, the developer server may generate a newdatabase record, and store the database record in a bundle requestdatabase. The bundle record may include fields such as, but not limitedto: an identifier (e.g., IP address) of an originator of the bundlerequest, an input string for which a new bundle ID is requested,variables/fields included in the input string, an identifier of a modulebeing called that requires the bundle ID, a name of the module beingcalled, a name of the host server providing the module, a number ofprior attempts to register the input string, a timestamp associated withthe bundle request, and/or the like. An exemplary listing of PHP/SQLcommands to generate a new bundle record, populate it with data such asthose above, and store the bundle request in a database is includedbelow in the discussion with reference to FIGS. 4A-C. In someimplementations, the string queue database may store one or more queuesof bundle requests submitted by various entities including developers,workstations, developer servers, app servers, etc. A string registryserver 306 may query the string queue database for pending bundlerequests and obtain a bundle request from the string queue database. Thestring registry server may then generate a bundle register request basedon the obtained bundle request from the string queue database, andprovide the bundle register request 311 e to the hosting server for theAPI being called in the input code. In some implementations, the stringregistry server may query the string queue database for the number ofrecords stored in the string queue database, and determine the number ofpending requests based on the number of records stored in the stringqueue database. In some implementations, the string registry server mayobtain a plurality of requests stored in the string queue database, andcombine the bundle requests into a batch of bundle requests. Forexample, the string registry database may obtain the bundle requestrecords, extract the input strings included in the records, append theinput strings in a bundle registration request batch array, and providethe bundle request batch array to the hosting server to process thepending bundle requests as a batch. Exemplary PHP/SQL commands forimplementing the above procedure are included below in the discussionwith reference to FIGS. 4A-C. The hosting server 308, upon obtaining thebundle register request(s), may register the input string(s)corresponding to the bundle register request(s), and provide details ofthe registered bundle(s) as a response 311 f to the string registryserver (e.g., as a HTTP(S) POST message including data encoded accordingto the eXtensible Markup Language (“XML”) in the message body, such asthe exemplary data listing included below in the discussion with regardto FIGS. A-C). Upon obtaining the response from the hosting server, thestring registry server may parse the response obtained from the hostingserver and extract the bundle ID(s) from the obtained hosting serverresponse. For each obtained bundle ID, the string registry server maycreate a new record in the bundle database corresponding to the newlyregistered bundle. using, for example, PHP/SQL commands similar to thosepresented above for storing new bundle requests in the string queuedatabase. In some implementations, the string registry server may alsonotify the developer/workstation/developer server that originated thebundle request that the bundle request has been successfully processed,and that a new bundle ID corresponding to the bundle request may beavailable in the bundle database. For example, the string registryserver may provide a HTTP(S) POST message to notify thedeveloper/workstation/developer server of bundle request processing. Anexemplary HTTP POST message for notification of completion of bundlerequest processing is provided below:

POST /developers/bundles.php HTTP/1.1 Host: www.developersystem.comUser-Agent: Mozilla/4.0 Content-Type: Application/XML Content-Length:301 <?XML version = “1.0” encoding = “UTF-8”?> <bundle_request_ack>   <request_id>ind\blore\a46763231</request_id>    <timestamp>2010-05-2321:44:12</timestamp>    <developer_ip>202.85.34.91</developer_ip>   <developer_md5_auth>bb311b03062d60eccb0dec7c7863d991   </user_md5_auth>    <bundle_id>AF81674</bundle_id></bundle_request_ack>

The string registry server may also remove the request corresponding tothe registered input string from the string queue database uponcompletion of processing of the submitted bundle request.

In some implementations, upon obtaining notification that the bundlerequest has been successfully processed, the originator of the bundlerequest (e.g., the developer server) may query 311 b the bundle databasefor the new bundle ID corresponding to the originally submitted bundlerequest. The bundle database may respond to the query by providing thebundle details (e.g., bundle ID) for the newly registered bundle for theoriginator. In some implementations, such bundle processing may beperformed by the developer system until bundle IDs are obtained for allthe input strings included with API calls in the modified code thatrequired bundle IDs. Upon obtaining the bundle IDs, the developer servermay update the code submitted by the developer using the bundle IDs fromthe bundle database. For example, the developer server may parse thecode submitted by the developer for the input strings corresponding tothe bundle IDs, identify the input strings in the code, and replace theinput strings with the bundle IDs provided by the bundle database. Thedeveloper server may store fully-updated/intermediate-update code 311 hto code database 304 c. In some implementations, once the modified codesubmitted by the developer has been updated completely to include bundleIDs for all API calls in the code that require bundle IDs, the developerservers may provide the finalized code for storage in the code database,and/or may compile the finalized code into an app module. The developerserver may provide the compiled app 311 i for storage in an app database304 b. An application server may access compiled app(s) stored in theapp database and/or finalized code stored in the code database andprovide 311 j the app(s) and/or code for deployment to the hostingserver and/or other intermediate entities that facilitate deployment ofsocial networking applications to the users/clients of the developersystems and/or hosting server. In implementations wherein a user iscurrently utilizing a prior version of an app for which an updated apphas been compiled according to the description above, the developersystem may transfer the user from utilizing the prior app version toutilizing the updated compiled app dynamically in real-time while theuser is continuously utilizing the multi-user social networkingapplication, as discussed further below in this disclosure. In someimplementations, a single instance of developer-provided code may makeAPI calls to a plurality of hosting servers associated with a pluralityof social networking service providers. In such implementations, thedeveloper system may communicate with each of the hosting servers forbundle registration with the hosting servers as needed. The developersystem may then update the API calls in the single instance of the codeusing the bundles associated with each of the hosting servers. In someimplementations, a single instance of developer-provided code may becompiled into a plurality of apps and/or updated code modules, each appand/or updated code module optimized for making API calls to a differenthosting server associated with a different social networking serviceprovider. For example, when a user utilizes the developer-provided codemodule via a first hosting server associated with a first socialnetworking service provider, the developer system may communicate withthe first hosting server to perform bundle registration and API callupdating based on the bundles associated with the first hosting server.The developer system may compile this version of the updated code intoan app optimized to communicate with the first hosting server. When auser utilizes the same developer-provided code via a second hostingserver associated with a second social networking service provider, thedeveloper system may repeat the above procedure for the second hostingserver. The developer system may then generate a second app optimized tocommunicate with the second hosting server. Accordingly, a singleinstance of developer-provided code may be utilized independently with aplurality of social networking service providers.

FIGS. 4A-C are of logic flow diagrams illustrating aspects of API callabstraction in some embodiments of the SNAM. In some implementations,API call abstraction may commence upon a developer providing input codevia a workstation. For example, a workstation may continuously monitor402 whether new code has been input 402 (e.g., manually by a developer)into the workstation, and wait 403 until the workstation detects (e.g.,by detecting a keystroke on a keyboard disposed in communication withthe workstation, an incoming file transfer, an incoming electronicmessage, etc.) that code has been input into the workstation.Alternatively, code updates to files may be triggered upon demand by thedeveloper (e.g., submitting a saved code update for input), by adelegate method observing for such changes on demand, periodically(e.g., via cron, etc.), and/or the like. Upon detecting that new inputcode is being provided to the workstation, the workstation may obtainsource code being provided 404. For example a developer may manuallyenter source code for an application module included among theapplications providing the social networking application services forthe user of the developer system. In some implementations, the inputcode may include API calls to APIs provided by the hosting server. Thedeveloper may provide one or more inputs for the API along with the APIcall. For example, the developer may provide an input text string, auser ID, and values for fields included in the input text string withthe API call. In some implementations, the developer may also providespecifications for the provided input code. For example, the developermay provide information on what application module the code provided isdirected to, whether the code is designed to be compiled, used as-is, atrun-time, and/or compiled on-the-fly, whether the code is designed to berun on a server and/or client, the operating system brands and versionnumbers for which the code module is designed, web browser brands andversion numbers with which the code may be compatible, hardwarerequirements that a computing system executing the code and/or itscompiled application version must and/or preferably may satisfy in orderfor the code's instructions to be adequately implemented, a list ofother applications and/or code modules on which the code depends inorder to provide the design features, and/or the like. An exemplaryXML-encoded data listing of application requirements such as thoselisted above is included below in the discussion with reference to FIGS.7A-C.

In some implementations, the workstation obtaining the input code mayassign a code ID to the provided input code, and may provide the codefor storage 405 in the code database along with the developer-providedspecifications and the assigned code ID. In alternate implementations,the workstation may provide the code to a developer server, which maythen assign a code ID and provide the code ID, input code, and codespecifications for storage in the code database. In someimplementations, upon obtaining the input code, the developer server mayparse 406 the code to identify API calls within the code. For example,an exemplary listing illustrating substantive aspects of parsing inputcode to identify API calls, written substantially in the form of PHPcommands, is provided below:

<?PHP header(‘Content-Type: text/plain’); $filename = “inputcode.php”;//name of code file to scan for API calls $handle = fopen($filename,“r”); //open code file for reading $buffer = fgets($handle, 4096);//read code file contents into a buffer $offset = 0; //set location fromwhich to start search $search = “host_api”; //set name of API call tosearch for $result = “results.txt”; //set filename for search resultsfile $open = fopen($result, “a”); //open search results file forappending //perform search until the end of the code file for the APIcall while(!feof($handle)) {   $pos = strpos($buffer, $search, $offset +1);  //find an occurrence   fwrite($open,$pos); //save position of theoccurrence   $offset = $pos; //move start position of next iteration }fclose($open);    //close search results file fclose($handle);   //close input code file ?>

If API calls to an API of the hosting server are found within the inputcode, the developer server may obtain any input strings provided to theAPIs via the API calls while parsing the input code for API calls. Insome implementations, the developer server may save API call detailsincluding, but not limited to, the input strings provided in the APIcalls, the names of APIs called, and positions of such API calls, forfurther use in API call abstraction processing. An exemplary programlisting illustrating substantive aspects of obtaining the input stringsto API calls identified in the input code, written substantially in theform of PHP commands compatible with API call parsing commands such asin the example above, is provided below:

<?PHP header(‘Content-Type: text/plain’); $start = strops($buffer, “(”,$pos + 1); //identify start of input string for //API call at positiongiven by $pos $end = strops($buffer, “)”, $start + 1); //identify end ofinput string $length = $end − $start; //determine input string length$string = substr($buffer, $start + 1, $length −1);  //extract inputstring fwrite($open, $string); //save input string ?>

In some implementations, upon obtaining an input string to an API callfrom the input code, the developer server may generate 407 and provide408 a query for a bundle ID corresponding to the input string providedwith the hosting server API call, for example, by providing the inputstring and an ID of the API called within the input code to a bundledatabase, and requesting in return a corresponding bundle ID. Forexample, the developer server may utilize Structured Query Language(SQL) commands within a PHP script to interface with relational databasemanagement system (RDBMS) database(s). An exemplary listing illustratingsubstantive aspects of querying a bundle database for a bundle IDcorresponding to an input string provided as part of an API call,written substantially in the form of PHP/SQL commands, is providedbelow:

<?PHP header(‘Content-Type: text/plain’); function bundle_query($string,$api_name, $DBserver, $password) {mysql_connect(“204.192.85.202”,$DBserver,$password); // access databaseserver mysql_select_db(“Bundle.SQL”); // select database table to search//create query for a bundle ID, bundle fields and host API name in the//APIBundleTable table using ‘$api_name’ and ‘$string’ as search terms$query = “SELECT bundle_id bundle_fields host_api_name FROMAPIBundleTable   WHERE host_api_name LIKE ‘%’ $api_name AND  input_string LIKE ‘%’ $string”; $result = mysql_query($query); //perform the search query mysql_close(“Bundle.SQL”); // close databaseaccess return $result; // return search result ?>

In some scenarios, the bundle database may have stored a bundle IDcorresponding to the query provided by the developer server. In suchscenarios, the bundle database may return a bundle ID in response to thereceived query, and the developer server may continue (e.g., 409, Option‘Yes’) operations including but not limited to, code updating,application module compiling, application deployment, and/or the like,as described further in this disclosure. However, in some scenarios, thebundle database may not have stored a bundle ID corresponding to therequested input string and API called in the input code (e.g., 409,Option ‘No’). In such scenarios, the developer server may generate abundle request, and provide the bundle request for queuing 410 in astring queue database. The bundle request may include, for example, theinput string into the API call, the fields included in the string, anInternet Protocol (“IP”) address of a developer workstation/serveroriginating the input code, an ID of the code module in which the APIcall was made, a name of the API being called, a variable indicating thenumber of times registration with the host server has been attempted forthe input string, a timestamp for the bundle request, and/or the like.An exemplary listing illustrating substantive aspects of providing agenerated bundle request to a string queue database, writtensubstantially in the form of PHP/SQL commands, is provided below:

<?PHP header(‘Content-Type: text/plain’);mysql_connect(“StringQueue.SQL”); // connect to string queue databasemysql_query(“INSERT INTO BundleRequestTable (input_string  bundle_fields origin_IP calling_module_ID host_api_name  register_attempts timestamp”); VALUES ($string, $bundle_fields,$api_name, “0”, time( )); // add bundle requestmysql_close(“StringQueue.SQL”); // close connection to database ?>

In some implementations, the developer, workstation and/or developerserver may monitor (e.g., continuously, periodically, on-demand,triggered by developer/user actions, through method delegates, etc.) theentities within the developer system for input code for new and/orupdating social networking applications, store provided input codesubmissions, parse the code for API calls requiring bundle IDs, querythe bundle database for corresponding bundle IDs, and submit bundlerequests to the string queue database for input strings that do not havepre-registered bundle IDs stored in the bundle database. In someimplementations, a string registry server may monitor the string queuedatabase for pending bundle requests submitted by entities within thedeveloper system. For example, the string registry server may query 412the string queue database for stored bundle requests, and wait 414 forthe number of records/results returned to be greater than a thresholdnumber to begin bundle request processing, following which the stringregistry server may commence processing the pending requests (e.g., 413,Option Yes). For example, the string registry server may obtain thepending requests 415 stored in the string queue database, sortedaccording to timestamps corresponding to when each pending request wassubmitted. The string registry server may then generate a bundleregistration request 416 (e.g., a batch comprising all pending requests,or a fixed number, of pending requests), remove the pending requests 423that have been included in the request to be submitted to the hostingserver, and provide 417 the bundle registration request for the hostingserver. An exemplary listing illustrating substantive aspects ofgenerating a batch of bundle registration requests, submitting thebundle registration requests, and removing the bundle registrationrequests from the queue, written substantially in the form of PHP/SQLcommands, is provided below:

<?PHP header(‘Content-Type: text/plain’);mysql_connect(“204.192.85.202”,$DBserver,$password); // access databaseserver mysql_select_db(“StringQueue.SQL”); //select string queuedatabase to search //query database for pending bundle requests, sortedby time of submission $query = “SELECT input_string bundle_fieldsorigin_IP calling_module_ID   host_api_name register_attempts FROMBundleRequestTable   ORDER BY timestamp ASC”; $result =mysql_query($query); // perform the search query //if there are enoughpending requests, process the requests in a batch if(mysql_num_rows($result) > $threshold) { $batch_request = array();  //initialize batch request array //determine number of requests toprocess if (mysql_num_rows($result) > $limit)   $process = $limit; else  $process = mysql_num_rows($result); // combine the requests selectedfor processing into a request batch for ($k = 1; $k <= $process; $k++) {  //extract details for a bundle request   $string =mysql_result($result, $k , mysql_field_name($result,1));   $IP =mysql_result($result, $k , mysql_field_name($result,3));   //appendbundle request details to batch request array   $batch_request =array($batch_request, $string);   $origin_IDs = array($origin_IDs,$IP); //save origin IDs for later   use   //remove appended bundlerequest from string queue database   $query = “DELETE FROMBundleRequestTable WHERE   mysql_field_name($result,1) =   $string”;  $result = mysql_query($query); } // end for-loop //provide batchregistration request and obtain response from hosting server $bundle =$hostserver->api_client-> feed_registerTemplateBundle($batch_request); }// end if-statement mysql_close(“StringQueue.SQL”); // close databaseaccess ?>

In some implementations, the hosting server may obtain bundleregistration requests submitted (e.g., in a batch, as illustrated in theabove example) by the developer system, and generate bundle IDsassociated with each of the bundle registration requests in thesubmitted request batch. The hosting server may provide 419 the bundleIDs in the form of a data file, such as a JavaScript Object Notation(“JSON”) data file, an eXtensible Markup Language (“XML”) data file,and/or the like. An exemplary listing illustrating substantive aspectsof providing bundle IDs for five bundle registration requests submittedin a batch to the hosting server by the developer system, writtensubstantially in the form of XML, is provided below:

<?XML version = “1.0” encoding = “UTF-8”?><feed_registerTemplateBundle_response   xmlns =“http://api.hostserver.com/1.0/”   xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”   xsi:schemaLocation =“http://api.hostserver.com/1.0/...”>   <bundle>38275927430</bundle>  <bundle>57384860381</bundle>   <bundle>08372947672</bundle>  <bundle>58927852285</bundle>   <bundle>69384719475</bundle></feed_registerTemplateBundle_response>

In some implementations, the string registry server may obtain 420 thebundle IDs provided by the hosting server, and correlate 421 theobtained bundle IDs to the original requests submitted to the stringqueue database. For example, the string registry server may parse an XMLdata file, e.g., such as illustrated in the example above, to obtain thebundle IDs provided by the hosting server in an array. The stringregistry server may correlate the bundle IDs obtained from the hostingserver to the input strings stored in the submitted batch request todetermine the correspondence between the bundle IDs and the inputstrings. Based on the correlation, the string registry server may update422 the bundle database with the bundle IDs obtained from the hostingserver, and, if not performed earlier, remove the bundle requests thathave been processed by the hosting server from the string queuedatabase. An example listing illustrating substantive aspects of theregistry server and/or databases, written substantially in the form ofPHP/SQL commands and generally compatible with the XML data in theexample above, is provided below:

<?PHP //parse $bundle storing XML data from hosting server to obtainbundle IDs //stored in $bundle_ID $start = “<bundle>”; $end =“</bundle>”; preg_match_all(″/$start(.*)$end/Us″, $bundle, $bundle_ID);//create new records in the bundle database for each of the processedbundle //requests in the submitted batch request, using the obtainedbundle IDs mysql_select_db(“Bundle.SQL”); // select bundle database tocreate new bundles for ($k = 1; $k <= $process; $k++) {  mysql_query(“INSERT INTO APIBundleTable (bundle_id   bundle_fieldshost_api_name input_string”)   VALUES (bundle_ID[k], $bundle_fields,$api_name,   $batch_request[k]); // add bundle request } //end for-loopmysql_close(“Bundle.SQL”); // close database access ?>

In some implementations, the string registry server may notify 424 thedeveloper server and/or workstation that originated the bundle requestthat the bundle request has been successfully been processed (e.g., bysending a message via HTTP(S) post, etc.), upon which 425 the developerserver and/or workstation may query the bundle database for the newlycreated bundle. In alternate implementations, the developer serverand/or workstation may periodically check for new bundles in the bundledatabase that may be required for code input into the developer serverand/or affiliated workstation, without notification being provided bythe string registry server. Upon obtaining 426 the new bundle ID for thenewly created bundle in the bundle database, the developer server mayobtain the code (e.g., from the code database), parse the code for APIcalls 427, identify the API calls to the hosting server for which bundleIDs are available (e.g., based on querying the bundle database based onthe identified input strings to the hosting server API calls), andupdate/replace 428 the found hosting server API call input strings withthe bundle IDs obtained from the bundle database. In someimplementations, the developer server may update 429 the stored versionof the code provided by the developer and/or workstation with theupdated code including the bundle IDs replacing the hosting server APIcall input strings. In some implementations, the developer system mayfurther develop/compile applications/modules using the updated code forproviding multi-user social networking application services for theusers/clients.

FIGS. 5A-B are of block diagrams illustrating aspects of API callabstraction request management in some embodiments of the SNAM. In someimplementations, the string registry server may select the next bundlerequest to be processed according to a priority queuing process. In someimplementations, the string registry server may determine the nextbundle request to process based on the order (e.g., using a timestampsubmitted with each bundle request) in which the bundle requests enteredthe string queue and a priority value assigned to each of the bundlerequests (e.g., based on an originating IP address associated with eachbundle request). Each bundle request in a string queue may be assigned aqueue number indicative of the order in which the bundle requestsentered the queue and a priority value indicative of the importanceattached to processing the bundle request. In some implementations, thestring registry server may determine the bundle request priority valuesbased on a number of factors including, but not limited to, bundle ID,originator ID, and/or the like. In some implementations, the stringregistry server may assign relative importance to the order in whichbundle requests entered the string queue and the priority value assignedto any particular bundle requests using position weights and/or priorityweights. For example, a net priority value of a bundle request in astring queue may be determined by the string registry server as theweighted sum of the queue position and the bundle request priority,wherein the weights are the position weight and the priority weight, asillustrated in FIG. 5A:

Net Bundle Request Priority Value = Request Queue Position * Position        Weight + Request Priority * Priority Weight;

In such implementations, the bundle request next selected for processingby the string registry server may be identified as the bundle requesthaving the highest net bundle request priority value. In furtherimplementations, the string registry server may utilize multiple queuesfor bundle requests, such as the non-limiting exemplary illustration inFIG. 5B. In some implementations, each string queue may be assigned aqueue priority weight relative to the other string queues for bundlerequests. In such implementations, the net priority value of a bundlerequest may be weighted by the weight assigned to its bundle requestqueue:

Net Bundle Request Priority Value = (Request Queue Position * Position        Weight + Request Priority * Priority Weight) * Queue        Priority Weight;

In some such implementations, the next bundle request selected by thestring registry server for processing among the bundle requests in allthe string queues may be the bundle request having the highest netbundle request priority value, including the weighting assigned to eachof the queues in the string queue database.

Social Networking Application Updating

FIG. 6 is of a data flow diagram illustrating aspects of socialnetworking application updating in some embodiments of the SNAM. In someimplementations, the SNAM system may, at any time, generate, store,maintain and/or deploy a large number of code modules, code versions,application modules, application versions, module/application dependencygraphs, application/module specifications, compatibility lists, and/orthe like, to provide social networking application services to a broaduser/client audience. In some implementations, thedevelopers/workstations may provide various application/module codeupdates and/or submissions for the developer servers. In response, thedeveloper system may analyze the provided code and accompanyingspecifications (e.g., parse the code, identify codedependencies/references, API calls and/or associated strings, determineclient browser/hardware requirements), modify the code if needed (e.g.,modify references to other code/application modules, register any newinput strings of API calls included in the modified code module, etc.),and compile updated and/or new applications/modules for providing thesocial networking application services for the users of the hostingserver/developer system.

Addition of new applications to the app database and/or updating ofexisting applications may be performed according to a variety ofstrategies, for example, as soon as all code modules available forcompiling an updated application are available, according to apre-determined planned schedule, on-demand by a developer, server and/orclient within the SNAM, and/or the like. In some implementations, adeveloper and/or application server(s) (“server”) may request 611 a andobtain 611 b an app update schedule from a database (e.g., the appdatabase). The app update schedule may include information on anapplication available in the database including, but not limited to, anapplication ID, application name, application version, applicationversion date, scheduled application update versions and times, developerproject team details, and/or the like. An exemplary XML data listingincluding app update schedule information, such those listed above, isprovided below:

<?XML version = “1.0” encoding = “UTF-8”?> <app_specification>  <app_ID>A82DNC31</app_ID>   <app_name>poker_client_main</app_name>  <app_version>v12.3.6.3</app_version>  <app_version_timestamp>2010-04-01   21:33:47</app_version_timestamp>  <app_update_schedule>     <app_update_version>v12.3.6.4      <deadline>2010-05-15</deadline>       <priority>medium</priority>    </app_update_version>     <app_update_version>v12.3.6.5      <deadline>2010-07-01</deadline>       <priority>low</priority>    </app_update_version>     <app_update_version>v12.3.7.0      <deadline>2011-01-01</deadline>       <priority>high</priority>    </app_update_version>   </app_update_schedule>   <developer>    <project_manager>John Q. Public</project_manager>    <project_team>blore\007</project_team>   </developer></app_specification>

The server may parse the app update schedule, and determine that aspecific application needs to be created and/or checked for updatesbased on the information available in the app update schedule. Inalternate implementations, the server may obtain an indication from aclient, developer and/or other entity within the SNAM to check forupdates to an application and information on a currently deployedversion of the application. In alternate implementations, the server maybe triggered by an event (e.g., “75% of application code in the codedatabase has been updated by the developer system,” “agreater-than-threshold volume of update requests has been received”etc.) to check whether updates to an application can be made based onthe information on the currently deployed application version andupdated coded submitted by developers to the developer system.

In some implementations, upon determining that an application needs tobe tested for updates, the server may generate and provide a query tothe app database for specifications of the application (e.g., 611 f)including, but not limited to, version information for the application,compatibility information for the application (e.g., compatibleoperating systems and version, compatible browsers, compatible hardware,etc.), application dependencies (e.g., module names/versions which arereferenced, external resources/APIs called etc., drivers required),hardware and/or software requirements, and/or the like. The app databasemay respond to the query with such information (e.g., 611 g) and/or mayprovide the actual application that is being checked for possibleupdating. In some implementations, the server may scan the applicationobtained from the app database and determine, based on scanning theapplication, such specifications for the application. An exemplaryXML-encoded listing of application requirements/compatibilities isprovided below:

<?XML version = “1.0” encoding = “UTF-8”?> <app_specification> <app_ID>A82DNC31</app_ID>  <app_name>poker_client_main</app_name> <app_type>Application (exe)</app_type> <app_version>v12.3.6.3</app_version> <app_compile_type>ahead-of-runtime</app_compile_type> <app_software_requirements>  <environment_type>MSWindows</environment_type>  <environment_version>XP 2003 7</environment_version> </app_software_requirements>  <app_hardware_requirements>  <processor>Intel Pentium</processor>   <memory>   <ROM>1024MB</ROM><RAM>256MB</RAM>   </memory> </app_hardware_requirements>  <dependency_graph>   <module>   <module_name>advapi32.dll</module_name>   <functions_called>RegSetValueEx RegClseKey</    functions_called>   <dependency_graph>     <module>     <module_name>kernek32.dll</module_name>     <functions_called>A_SHAInit</functions_called>     </module>   </dependency graph>   </module>  </dependency_graph></app_specification>

Upon obtaining the specifications for the currently deployed applicationversion, the server may generate a query (e.g., 611 c) for, and obtaininformation (e.g., 611 d) on, code IDs and code version numbers of codemodules that are related (e.g., code for the application being testedfor updating, code for a module/application referenced/redirectedto/called in the application, etc.) to the application, based on theobtained specifications of the currently deployed application version.Upon obtaining the information on code IDs and code version numbers ofcode modules related to the application being checked for updates, theserver may generate queries for specifications (e.g., 611 e) of the codemodules based on the code IDs and code version numbers. In someimplementations, the specification information of the related codemodules may be provided by the code database being queried, along withthe code IDs and version numbers. The server may analyze the code IDsand code version numbers of the related code modules in view of theversion number and the dependencies of the currently deployed version ofthe application. The server may determine whether an update to currentlydeployed version of the application may be performed based on whethersufficient updates are available among the code modules related to thecurrently deployed version of the application. Upon determining thatsufficient updates to the related code modules are available such thatan application update is possible, the server may determine the codemodule(s) and/or version number(s) of such code module(s) that arerequired in order to compile an updated version of the currentlydeployed version of the application. The server may generate and providea code module query (e.g., 611 h) for the related code module needed tocompile the application update. Upon obtaining the code module query,the code database may provide the requested code module(s) (e.g., 611 i)for the server. The server may, upon obtaining the required codemodules, code specifications, application specifications, applicationdependencies etc., compile the updated version of the application basedon the obtained information. The server may assign a new version numberfor the updated version of the application, and then provide (e.g., 611j) the updated version of the application, version information,specifications for the updated version of the application, applicationdependencies, etc. for storage to the app database.

FIGS. 7A-C are of logic flow diagrams illustrating aspects of socialnetworking application updating in some embodiments of the SNAM. In someimplementations, social networking application updating may commenceupon obtaining an indication 702 to check whether updating anapplication is possible based on available updates to code stored in acode database. In some implementations, a user/client may send to theSNAM-affiliated server(s) a “check for updates” message to triggersocial networking application updating. For example, a client device maysend a HyperText Transfer Protocol (“HTTP”) POST message requesting acheck for updates to an application, and the server may initiateapplication update check on-demand. An exemplary listing illustratingsubstantive aspects of a HTTP POST message (e.g., sent by a web browserexecuting on a client computing system) sent to initiate a server-sideapplication update checking PHP script is provided below:

POST /poker/clientupdater.php HTTP/1.1 Host: www.snam.com User-Agent:Mozilla/4.0 Content-Type: application/xml; charset=UTF-8 Content-Length:174 <?XML version = “1.0” encoding = “UTF-8”?>  <app_ID>A82DNC31</app_ID>   <app_name>poker_client_main</app_name>  <app_type>Flash Object</app_type>  <app_version>v12.3.6.3</app_version>

In other implementations, a server may periodically initiateautomatically an application update check. In further implementationsSNAM-affiliated entity activities and/or processes, changes to valuesfor data variables stored in a database and/or other changes of state ofthe SNAM may trigger application update checking by a server. In someimplementations, upon obtaining the indication to perform theapplication update check, the server may execute a PHP script includingSQL commands to query the app database for an app update schedule. Uponobtaining the query, the database may provide an app update schedule as,for example, XML-encoded data. The server may parse the app updateschedule from the app database to obtain app update schedule details foran application (e.g., the application for which an update check wasrequested by the user/client) (e.g., via grep, a string selectprocedure, SOAP parse method, query select command, and/or the like).The server may compare the version number provided by the client withthe current version number included in the app update schedule. If theclient-provided version number is older than the current version asindicated in the app update schedule, the server may provided anindication to the client that the client possesses an outdated versionof the application, and may provide a link for the client to obtain thecurrent version of the application. The server may also analyze thescheduled update plan as provided in the app update schedule. If theserver determines that an update to the current version of theapplication may be possible based on analyzing the app update schedule,the server may continue with the application update checking. In someimplementations, the server may query for, and obtain from the appdatabase 703, the current version of the application using theapplication information from the app update schedule. The server mayscan the obtained current version of the application to determine adependency graph topology 704 for the current version of theapplication. For example, in the case of a 32-bit or 64-bit executableapplication/module (*.exe, *.dll, *.ocx, *.sys, etc. filetypes) forMicrosoft Windows® operating systems, the server may utilize theDependency Walker freeware utility (depends.exe) in a command-line,batch-processing mode to scan the executable, build a hierarchical treediagram of modules the executable depends on to provide its features,generate a listing of procedures within those modules that are called bythe executable (“dependent modules,” which may include the top-most codemodule, i.e., the module at the top of the hierarchical tree diagram ofmodules and making the primary procedure calls), generate a listing ofthe minimum set of required files including detailed file information(e.g., name, typical file path, version number, machine type, debuginformation, etc.) 705, and provide the results of such dependencyanalysis of the executable as a text file for easy parsing by theserver. Alternatively, under Macintosh OS X, querying via Spotlight forfilesystem version number metadata may yield similar results. Inalternate implementations, such information may previously be stored ina database in the SNAM (e.g., in the app database), and the server mayquery the database and obtain the stored information from the database.

In some implementations, the server may utilize the dependent modulefile information from the dependency graph topology to query the codedatabase for internal code IDs 706 associated with dependent modules.The server may obtain the code IDs for the dependent modules from thecode database 707, and may query the code database to obtain all versionnumbers 708 of code available for the code IDs corresponding to thedependent modules, for example, sorted by version number. Upon obtainingthe versions numbers of the dependent code modules from the codedatabase, the server may compare 709 the code versions of the dependentmodules of the currently deployed application version to the most recentcode versions numbers available for those dependent modules. If no newversions of dependent module code are available (e.g., 710, Option“No”), the server may determine that updates to the currently deployedversion of the application module are not possible at the present time,discontinue application updating for the current application, and maychoose another application module for which to initiate applicationupdate checking. If new versions of dependent module code are available(e.g., 710, Option “Yes”), the server may identify the dependent modulesfor which updated versions of code are available, and identify 711 thecode version numbers for the available updated versions of code for thedependent modules. For example, in some implementations, the server mayobtain all available code version numbers for a dependent module, sortedin descending order of version numbers. The server may then identify arecord number of the code version corresponding to the currentlydeployed code version of the dependent module. In such an example, therecords preceding this identified record number would be of morerecently updated versions of the dependent module code than thecurrently deployed version. The server may extract the code IDs and codeversion numbers of the dependent module versions corresponding to thesepreceding record numbers.

In some implementations, the server may query 712 the code database forspecifications of the current versions of dependent module code forwhich it was identified that newer versions of code are available, andfor the newer versions of these identified dependent code modules. Thecode database may respond to the query by providing 713 thespecifications data files for the requested dependent code moduleversions, which the server may parse 714 to extract the specificationsof the dependent code module versions. The server may query 715 for, andobtain from the app database, the app update schedule including theproposed version numbers of the scheduled application update versions.The server may select 716 one of the proposed version numbers of thescheduled application update versions as being the update version numberto which the server may attempt to update the currently deployed versionof the application. As a non-limiting example of the selectionmethodology, the server may determine an amount of time remaining untila deadline for updating the current version of the application to eachproposed version number, and may determine a numeric relative prioritylevel for each proposed application update version number. The servermay calculate a ratio of the time remaining until the deadline forupdating the current version of the application to each proposed versionnumber, to the priority level for that proposed application updateversion number. The server may then select the scheduled applicationupdate version having the lowest such associated ratio as being theapplication update version to which updating of the currently deployedapplication version may be attempted. Upon selecting a scheduledapplication update version for attempting updating of the currentlydeployed version of the application to, the server may query 717 the appdatabase for proposed specifications for the selected scheduled updatedversion of the application. The app database may provide the proposedspecifications for the scheduled updated version of the application as adata file, which the server may parse to extract the proposedspecifications information for the updated application version.

In some implementations, the server may utilize an iterative process718-720 to select the dependent code module versions using which toattempt updating the currently deployed version of the application. Theserver may identify 718 an initial set of dependent module code versionsthat could be compatible with the updated version of the application.The server may attempt to update the application using this initial setof dependent code modules. In some implementations, the server mayselect (e.g., 726) the most recent versions for all dependent codemodules as the initial set of dependent code modules. The server mayobtain the specifications (e.g., 727) of the versions of the dependentcode modules in the selected set, and compare attributes of each of thedependent code module versions in the selected set with those of likeattributes of the selected scheduled application update version todetermine whether the dependent code module set is fully compatible withthe updated application module. Following is a non-limiting, exampledependent module selection strategy that may be used in someimplementations of the SNAM. For each dependent code module version inthe selected set, the server may obtain specification attributes (e.g.,from the code database). The server may compare (e.g., 728) thespecification attributes of the dependent code module version includedin the dependent code module set against the specification attributes ofthe updated application module. Based on the specification attributescomparison, the server may determine, for each dependent code moduleversion, a number of specification attributes that are incompatible withthe corresponding specification attributes of the updated applicationmodule (e.g., 729). For example, the server may determine a number ofattributes of each dependent code module for which the attribute valuesdiffer from the like attribute values of the selected scheduledapplication update version. The server may check whether all dependentcode module versions are fully compatible (e.g., 730) with the updatedapplication module by analyzing the number of incompatible specificationattributes for each of the dependent code module versions. If at leastone dependent code module version has non-zero incompatiblespecification attributes (e.g., 730, Option ‘No’), the server mayidentify, based on the above computations, a least compatible dependentcode module (e.g., 731) as that module having the greatest number ofincompatible specifications attributes (e.g., attributes with valuesdiffering from those of like attributes of the selected scheduledapplication update version). If a least compatible dependent code modulecan be identified having at least one incompatible attribute, the servermay determine that the currently selected set of code module versionsmay not be used to perform application updating (e.g., 720, Option No).In such an instance, the server may modify the set of dependent modulecode versions by selecting a different version number for the leastcompatible dependent code module. For example, the server may identify acurrent version number for the least compatible code module version(e.g., 732), and select for a new dependent module code set the nextmost recent version (e.g., 733) of the dependent code module versionidentified as being least compatible, while maintaining the same codemodule version numbers for the other dependent code modules in the set.The attributes of the specifications of the modified dependent codemodule version set may again be compared against those of the selectedscheduled application update version to identify any least compatibledependent code module versions. Such a comparison and dependent codemodule version modification strategy may be iteratively executed untilthe server determines that all dependent code module versions in the setare fully compatible with the selected scheduled application updateversion (e.g., 720, Option ‘Yes’, 730, Option ‘Yes’). The server mayidentify (e.g., 721, 735) the dependent code module version numbers ofthe dependent code modules in this fully compatible dependent codemodule set and query for, and obtain from the code database, suchdependent module code versions. The server may then compile 722 theselected updated application version, using the dependent code moduleset identified as being fully compatible with the updated applicationmodule. As a non-limiting example, for compiling Adobe Flash® (*.flv,*.swf, etc. filetypes) object code authored using Adobe® ActionScriptscripting language, the server may utilize the Adobe® Flex freewareopen-source development framework designed for building cross-platformrich Internet applications. In some implementations, pre-runtime(ahead-of-time) compilation may not be required, for example, forapplications using interpreted compilation and/or just-in-time (JIT)compilation. The server may then generate an updated app update scheduleand specifications for the developed application update, store theupdated application and/or code 723, application version number,application specifications 724, etc., in the app and/or code databasesto complete application updating.

FIG. 8 is of a data flow diagram illustrating aspects of socialnetworking application update deployment in some embodiments of theSNAM. In some implementations of the SNAM, a user/client may send to theSNAM-affiliated server(s) a “check for updates” message 811 a to triggersocial networking application updating. For example, the client mayprovide a HTTP(S) POST message similar to the example provided below inthe discussion with reference to FIGS. 9A-C including applicationversion information, which may trigger the social networking applicationupdating. In other implementations, a server may periodically initiateautomatically an application update check. In further implementationsSNAM-affiliated entity activities and/or processes, changes to valuesfor data variables stored in a database and/or other changes of state ofthe SNAM may trigger application update checking by a server. In someimplementations, the server may query for, and obtain from the appdatabase, the app update schedule 811 b. The server may parse the appupdate schedule, determine application version numbers that exists inthe app database, and obtain application specifications for eachapplication version. The server may also request 811 c applicationversion details for the application currently deployed to the user,along with information on the user and/or client's computingenvironment. The user and/or client may respond with the requestedinformation 811 d. The server may compare the user and/or clientinformation with the specification information of the applicationversions stored in the database to determine whether an applicationversion exists that represents an update to the version currentlydeployed to the user and/or client, and is compatible with the hardware,software and/or user requirements as provided by the user and/or client.If such an update exists, the server may query for, and obtain 811 efrom the app database, the user/client-compatible updated applicationversion, and coordinate 811 f updating of the client application usingthe obtained application.

FIGS. 9A-C are of logic flow diagrams illustrating aspects of socialnetworking application update deployment in some embodiments of theSNAM. In some implementations, a user may be using an outdated versionof an application executing on a client terminal. The client applicationmay be communicating with a script executing on a server within theSNAM. In some implementations, the client application may provide anindication of the application version of the application executing onthe client terminal. For example, the client may be executing anAsynchronous JavaScript and XML (“AJAX”), which may provide a HTTP(S)POST message including such details as the application ID, applicationname, application version, application version timestamp, and/or thelike, in the message body of the HTTP POST message as JSON-encoded data.An exemplary program listing illustrating substantive aspects ofproviding a HTTP POST message including the indication of theapplication version to the server as JSON-encoded data, writtensubstantially in the form of AJAX commands, is provided below:

<script type = “text/javascript” src=“http://www.json.org/json.js”></script> <script type = “text/javascript”> var dataJSON = {“client_app” {   ″app_ID″: ″AC62D728″,   ″app_name″:″client_poker_main.js″,   ″app_version″: ″v12.3.6.1″,  ″app_version_timestamp″: ″2010-04-01 09:23:43″} } var strJSON =encodeURIComponent(JSON.stringify(dataJSON)); var client = newXMLHttpRequest( ); client.open(“POST”, “appupdatecheck.php?inputText=” +strJSON); client.setRequestHeader(“Host”, “www.snam.com”);client.setRequestHeader(“Content-Type”, “application/json; charset =UTF-8”); client.setRequestHeader(“Content-Length”, “140”); client.send(); </script>

In some implementations, the server may execute a PHP script, which mayparse the JSON-encoded data in the provided POST message into a PHPvariable using the JSON_decode( ) procedure, and extract the providedapplication version details. An exemplary program listing illustratingsubstantive aspects of obtaining the POST message with the JSON-encodeddata and converting it into a PHP variable, written substantially in theform of PHP commands, is provided below:

<?PHP // if inputText is provided (e.g., via HTTP POST to PHP script),obtain data   if(isset($_GET[‘inputText’])) {       $json_string =$_GET[‘inputText’]);       $json_data = json_decode($json_string); } ?>

Upon obtaining the application version data from the client, the servermay compare the version timestamp of the application version used by theclient to the current time. If the difference in time between thetimestamp and the current time is greater than a specified threshold,the server may determine 903 that updated application deployment may berequired for the user and/or client. The server may generate and providea query 904 (e.g., a HTTP POST message) for all applications andassociated application version numbers being used by the client. Theclient-side application may obtain the request, and provide 905 to theserver the requested information on applications and version numbersbeing used by the client. Upon obtaining the application informationfrom the client, the server may use the obtained application informationto generate and provide to the app database queries 906 for app updateschedules for the applications being used by the client. The appdatabase may provide 907 the requested app update schedules for theserver. In some implementations, an app update schedule may includeversion numbers and version created/scheduled dates for various prior,current and future versions of the application. An exemplary XML datalisting illustrating substantive aspects of application versioninformation included in an app update schedule is provided below:

<?XML version = “1.0” encoding = “UTF-8”?> <app_ID>A82DNC31</app_ID><app_name>poker_client_main</app_name> <app_type>Application(exe)</app_type> <app_current_version>v12.3.6.3</app_current_version><current_version_timestamp>2010-03-2416:43:19</current_version_timestamp> <prior_versions>  <version>v12.3.6.2<timestamp>2010-01-03  15:23:03</timestamp></version>  <version>v12.3.6.1b<timestamp>2009-11-07  07:28:57</timestamp></version>  <version>v12.3.6.1a<timestamp>2009-08-16  16:22:23</timestamp></version>  <version>v12.3.6.0c<timestamp>2008-04-21  16:33:09</timestamp></version> </prior_versions> <scheduled_versions>  <version>v12.3.7.2<scheduled>2011-02-01</scheduled></version>  <version>v12.3.7.1<scheduled>2010-10-07</scheduled></version>  <version>v12.3.7.0<scheduled>2010-03-16</scheduled></version>  <version>v12.3.6.3<scheduled>2010-01-21</scheduled></version></scheduled_versions>

The server may compare the application information obtained from theclient with the version information included in the app update schedule.Based on the comparison, the server may determine that the clientapplication is outdated, and that a user application update may beperformed (908, Option “Yes”). Upon determining that the clientapplication may be updated, the server may generate a request 909 foruser/client information including, but not limited to, operating systemname, operating system version, operating system service pack, memorycapability, processor name, processor instruction set, web browser name,web browser version, network connection type, network connectionbandwidth, and/or the like. The user and/or client may obtain therequest for user/client information, and provide the requesteduser/client information 910 for the server, e.g., as a JSON-encoded datafile via a HTTP(S) POST message. The server may obtain the informationfrom the user/client, and may parse the obtained data file to extract alist of user/client compatibilities. The server may generate 913 one ormore queries, based on the user/client compatibilities, and provide thequeries for the app database to obtain application version number of theapplication that have specifications that are compatible with theuser/client compatibilities. Upon obtaining the queries, the appdatabase may provide 914 version numbers of application versions thatare compatible with the user/client compatibilities, and theirassociated timestamps. The server may analyze the timestamps todetermine 915 whether a more recent version than the version being usedby the user/client is available. If a more recent compatible applicationversion is available (e.g., 916, Option “Yes”), the server may query 916the app database for the most recent compatible version of theapplication and obtain the most recent compatible version of theapplication from the app database. In some implementations, the servermay obtain a number of such compatible updated applications for aplurality of applications being utilized by the user/client.

In some implementations, upon obtaining the updated applicationversions, the server may provide a notification 917 to the user/clientthat an updated application version is available for an applicationbeing used by the user/client. The server may also provide a list ofapplications/processes that will be provided if the update is acceptedby the client. The client, upon obtaining the notification 918, maydetermine whether any of the applications/processes listed by the serverin its notification message are alive 919. If any applications/processesfor which the server has indicated that updated versions are availableare alive (e.g., 919, Option “Yes”), the client may determine whetherthe states of such applications/processes are stored in a non-volatilememory 921; e.g., on the server (e.g., in a user profile for that app,etc.), on the client (e.g., in a cookie, etc.), and/or the like. If thestates of the applications/processes are not stored in a non-volatilememory (e.g., 921, Option No), the client may store 922 the states ofthe applications/processes (e.g., a data structure comprising all datapertaining to the applications/processes) to a non-volatile memory(e.g., hard disk, flash memory card, etc.). The client may also storeinformation on which applications were live at a time just prior tosaving the state of the applications/processes in the non-volatilememory. The client may then kill/delete 923 any applications/processesthat are part of the application update provided by the server, and anyapplications/processes on which the to-be-updated applications aredependent. Once the required applications/processes are killed/deleted,the client may provide a request for a new version of the application.For example, the client may request initiation of an FTP(S) session withthe server to download 924 the application update. An exemplary programlisting written substantially in the form of FTP(S) commands andillustrating substantive aspects of creating a FTP(S) session,downloading application files onto the client, and closing the FTP(S)session is provided below:

ftps userID:password@apps.SNAM.com get ClientUpdate1.tar.gz close

Once the client obtains the application files provided by the server,the client may, if needed, unpack the downloaded application files,overwrite 924 the old prior version of the application with thedownloaded updated version of the application. The client may alsoperform any required installation, including modification of keys in aregistry of the client, addition/modification of application shortcuts,inclusion of dependent modules in appropriate file paths, and/or thelike. In some implementations, the client may, upon completion ofoverwrite, installation and/or settings customization procedures, mayaccess the memory location in the non-volatile memory to determine whichapplication was running prior to the client killing/deleting processes.The client may restart such applications/processes stored in thenon-volatile memory location 925, and if needed, pass a parameter for itto load any previously stored states. As such, the client may alsoobtain the stored previous state (as indicated by parameter, looking ina predefined location, obtaining it from the user's profile, etc.) ofthe applications/processes from the non-volatile memory location, andload the previously stored state 926 into the newly updated andcurrently executing applications/processes. The client may provide anotification to the server that the application has been successfullyupdated. The server, in response to obtaining such notification, maycheck if more application updates are available for the server toprovide for the client. If additional application updates are available,the server may repeat the application updating sequence (e.g., 917-926)iteratively until the server determines that no further applicationupdates are available for providing for the client, and may quitapplication update processing (e.g., 928).

SNAM Controller

FIG. 10 illustrates inventive aspects of a SNAM controller 1001 in ablock diagram. In this embodiment, the SNAM controller 1001 may serve toaggregate, process, store, search, serve, identify, instruct, generate,match, and/or facilitate interactions with a computer through enterpriseand human resource management technologies, and/or other related data.

Typically, users, which may be people and/or other systems, may engageinformation technology systems (e.g., computers) to facilitateinformation processing. In turn, computers employ processors to processinformation; such processors 1003 may be referred to as centralprocessing units (CPU). One form of processor is referred to as amicroprocessor. CPUs use communicative circuits to pass binary encodedsignals acting as instructions to enable various operations. Theseinstructions may be operational and/or data instructions containingand/or referencing other instructions and data in various processoraccessible and operable areas of memory 1029 (e.g., registers, cachememory, random access memory, etc.). Such communicative instructions maybe stored and/or transmitted in batches (e.g., batches of instructions)as programs and/or data components to facilitate desired operations.These stored instruction codes, e.g., programs, may engage the CPUcircuit components and other motherboard and/or system components toperform desired operations. One type of program is a computer operatingsystem, which, may be executed by CPU on a computer; the operatingsystem enables and facilitates users to access and operate computerinformation technology and resources. Some resources that may beemployed in information technology systems include: input and outputmechanisms through which data may pass into and out of a computer;memory storage into which data may be saved; and processors by whichinformation may be processed. These information technology systems maybe used to collect data for later retrieval, analysis, and manipulation,which may be facilitated through a database program. These informationtechnology systems provide interfaces that allow users to access andoperate various system components.

In one embodiment, the SNAM controller 1001 may be connected to and/orcommunicate with entities such as, but not limited to: one or more usersfrom user input devices loll; peripheral devices 1012; an optionalcryptographic processor device 1028; and/or a communications network1013. For example, the SNAM controller 801 may be connected to and/orcommunicate with users operating communication instrument(s) including,but not limited to, personal computer(s), server(s) and/or variousmobile device(s) including, but not limited to, cellular telephone(s),smartphone(s) (e.g., iPhone®, Blackberry®, Android OS-based phonesetc.), tablet computer(s) (e.g., Apple iPad™, HP Slate™ etc.), eBookreader(s) (e.g., Amazon Kindle™ etc.), laptop computer(s), notebook(s),netbook(s), gaming console(s) (e.g., Nintendo® DS etc.), portablescanner(s) and/or the like.

Networks are commonly thought to comprise the interconnection andinteroperation of clients, servers, and intermediary nodes in a graphtopology. It should be noted that the term “server” as used throughoutthis application refers generally to a computer, other device, program,or combination thereof that processes and responds to the requests ofremote users across a communications network. Servers serve theirinformation to requesting “clients.” The term “client” as used hereinrefers generally to a computer, program, other device, user and/orcombination thereof that is capable of processing and making requestsand obtaining and processing any responses from servers across acommunications network. A computer, other device, program, orcombination thereof that facilitates, processes information andrequests, and/or furthers the passage of information from a source userto a destination user is commonly referred to as a “node.” Networks aregenerally thought to facilitate the transfer of information from sourcepoints to destinations. A node specifically tasked with furthering thepassage of information from a source to a destination is commonly calleda “router.” There are many forms of networks such as Local Area Networks(LANs), Pico networks, Wide Area Networks (WANs), Wireless Networks(WLANs), etc. For example, the Internet is generally accepted as beingan interconnection of a multitude of networks whereby remote clients andservers may access and interoperate with one another.

The SNAM controller 1001 may be based on computer systems that maycomprise, but are not limited to, components such as: a computersystemization 1002 connected to memory 1029.

Computer Systemization

A computer systemization 1002 may comprise a clock 1030, centralprocessing unit (“CPU(s)” and/or “processor(s)” (these terms are usedinterchangeable throughout the disclosure unless noted to the contrary))1003, a memory 1029 (e.g., a read only memory (ROM) 1006, a randomaccess memory (RAM) 1005, etc.), and/or an interface bus 1007, and mostfrequently, although not necessarily, are all interconnected and/orcommunicating through a system bus 1004 on one or more (mother)board(s)1002 having conductive and/or otherwise transportive circuit pathwaysthrough which instructions (e.g., binary encoded signals) may travel toeffect communications, operations, storage, etc. Optionally, thecomputer systemization may be connected to an internal power source1086. Optionally, a cryptographic processor 1026 may be connected to thesystem bus. The system clock typically has a crystal oscillator andgenerates a base signal through the computer systemization's circuitpathways. The clock is typically coupled to the system bus and variousclock multipliers that will increase or decrease the base operatingfrequency for other components interconnected in the computersystemization. The clock and various components in a computersystemization drive signals embodying information throughout the system.Such transmission and reception of instructions embodying informationthroughout a computer systemization may be commonly referred to ascommunications. These communicative instructions may further betransmitted, received, and the cause of return and/or replycommunications beyond the instant computer systemization to:communications networks, input devices, other computer systemizations,peripheral devices, and/or the like. Of course, any of the abovecomponents may be connected directly to one another, connected to theCPU, and/or organized in numerous variations employed as exemplified byvarious computer systems.

The CPU comprises at least one high-speed data processor adequate toexecute program components for executing user and/or system-generatedrequests. Often, the processors themselves will incorporate variousspecialized processing units, such as, but not limited to: integratedsystem (bus) controllers, memory management control units, floatingpoint units, and even specialized processing sub-units like graphicsprocessing units, digital signal processing units, and/or the like.Additionally, processors may include internal fast access addressablememory, and be capable of mapping and addressing memory 529 beyond theprocessor itself; internal memory may include, but is not limited to:fast registers, various levels of cache memory (e.g., level 1, 2, 3,etc.), RAM, etc. The processor may access this memory through the use ofa memory address space that is accessible via instruction address, whichthe processor can construct and decode allowing it to access a circuitpath to a specific memory address space having a memory state. The CPUmay be a microprocessor such as: AMD's Athlon, Duron and/or Opteron;ARM's application, embedded and secure processors; IBM and/or Motorola'sDragonBall and PowerPC; IBM's and Sony's Cell processor; Intel'sCeleron, Core (2) Duo, Itanium, Pentium, Xeon, and/or XScale; and/or thelike processor(s). The CPU interacts with memory through instructionpassing through conductive and/or transportive conduits (e.g., (printed)electronic and/or optic circuits) to execute stored instructions (i.e.,program code) according to conventional data processing techniques. Suchinstruction passing facilitates communication within the SNAM controllerand beyond through various interfaces. Should processing requirementsdictate a greater amount speed and/or capacity, distributed processors(e.g., Distributed SNAM), mainframe, multi-core, parallel, and/orsuper-computer architectures may similarly be employed. Alternatively,should deployment requirements dictate greater portability, smallerPersonal Digital Assistants (PDAs) may be employed.

Depending on the particular implementation, features of the SNAM may beachieved by implementing a microcontroller such as CAST's R8051XC2microcontroller; Intel's MCS 51 (i.e., 8051 microcontroller); and/or thelike. Also, to implement certain features of the SNAM, some featureimplementations may rely on embedded components, such as:Application-Specific Integrated Circuit (“ASIC”), Digital SignalProcessing (“DSP”), Field Programmable Gate Array (“FPGA”), and/or thelike embedded technology. For example, any of the SNAM componentcollection (distributed or otherwise) and/or features may be implementedvia the microprocessor and/or via embedded components; e.g., via ASIC,coprocessor, DSP, FPGA, and/or the like. Alternately, someimplementations of the SNAM may be implemented with embedded componentsthat are configured and used to achieve a variety of features or signalprocessing.

Depending on the particular implementation, the embedded components mayinclude software solutions, hardware solutions, and/or some combinationof both hardware/software solutions. For example, SNAM featuresdiscussed herein may be achieved through implementing FPGAs, which are asemiconductor devices containing programmable logic components called“logic blocks”, and programmable interconnects, such as the highperformance FPGA Virtex series and/or the low cost Spartan seriesmanufactured by Xilinx. Logic blocks and interconnects can be programmedby the customer or designer, after the FPGA is manufactured, toimplement any of the SNAM features. A hierarchy of programmableinterconnects allow logic blocks to be interconnected as needed by theSNAM system designer/administrator, somewhat like a one-chipprogrammable breadboard. An FPGA's logic blocks can be programmed toperform the function of basic logic gates such as AND, and XOR, or morecomplex combinational functions such as decoders or simple mathematicalfunctions. In most FPGAs, the logic blocks also include memory elements,which may be simple flip-flops or more complete blocks of memory. Insome circumstances, the SNAM may be developed on regular FPGAs and thenmigrated into a fixed version that more resembles ASIC implementations.Alternate or coordinating implementations may migrate SNAM controllerfeatures to a final ASIC instead of or in addition to FPGAs. Dependingon the implementation all of the aforementioned embedded components andmicroprocessors may be considered the “CPU” and/or “processor” for theSNAM.

Power Source

The power source 1086 may be of any standard form for powering smallelectronic circuit board devices such as the following power cells:alkaline, lithium hydride, lithium ion, lithium polymer, nickel cadmium,solar cells, and/or the like. Other types of AC or DC power sources maybe used as well. In the case of solar cells, in one embodiment, the caseprovides an aperture through which the solar cell may capture photonicenergy. The power cell 1086 is connected to at least one of theinterconnected subsequent components of the SNAM thereby providing anelectric current to all subsequent components. In one example, the powersource 1086 is connected to the system bus component 1004. In analternative embodiment, an outside power source 1086 is provided througha connection across the I/O 1008 interface. For example, a USB and/orIEEE 1394 connection carries both data and power across the connectionand is therefore a suitable source of power.

Interface Adapters

Interface bus(es) 1007 may accept, connect, and/or communicate to anumber of interface adapters, conventionally although not necessarily inthe form of adapter cards, such as but not limited to: input outputinterfaces (I/O) 1008, storage interfaces 1009, network interfaces 1010,and/or the like. Optionally, cryptographic processor interfaces 1027similarly may be connected to the interface bus. The interface busprovides for the communications of interface adapters with one anotheras well as with other components of the computer systemization.Interface adapters are adapted for a compatible interface bus. Interfaceadapters conventionally connect to the interface bus via a slotarchitecture. Conventional slot architectures may be employed, such as,but not limited to: Accelerated Graphics Port (AGP), Card Bus,(Extended) Industry Standard Architecture ((E)ISA), Micro ChannelArchitecture (MCA), NuBus, Peripheral Component Interconnect (Extended)(PCI(X)), PCI Express, Personal Computer Memory Card InternationalAssociation (PCMCIA), and/or the like.

Storage interfaces 1009 may accept, communicate, and/or connect to anumber of storage devices such as, but not limited to: storage devices1014, removable disc devices, and/or the like. Storage interfaces mayemploy connection protocols such as, but not limited to: (Ultra)(Serial) Advanced Technology Attachment (Packet Interface) ((Ultra)(Serial) ATA(PI)), (Enhanced) Integrated Drive Electronics ((E)IDE),Institute of Electrical and Electronics Engineers (IEEE) 1394, fiberchannel, Small Computer Systems Interface (SCSI), Universal Serial Bus(USB), and/or the like.

Network interfaces 1010 may accept, communicate, and/or connect to acommunications network 1013. Through a communications network 1013, theSNAM controller is accessible through remote clients 1033 b (e.g.,computers with web browsers) by users 1033 a. Network interfaces mayemploy connection protocols such as, but not limited to: direct connect,Ethernet (thick, thin, twisted pair 10/100/1000 Base T, and/or thelike), Token Ring, wireless connection such as IEEE 802.11a-x, and/orthe like. Should processing requirements dictate a greater amount speedand/or capacity, distributed network controllers (e.g., DistributedSNAM), architectures may similarly be employed to pool, load balance,and/or otherwise increase the communicative bandwidth required by theSNAM controller. A communications network may be any one and/or thecombination of the following: a direct interconnection; the Internet; aLocal Area Network (LAN); a Metropolitan Area Network (MAN); anOperating Missions as Nodes on the Internet (OMNI); a secured customconnection; a Wide Area Network (WAN); a wireless network (e.g.,employing protocols such as, but not limited to a Wireless ApplicationProtocol (WAP), I-mode, and/or the like); and/or the like. A networkinterface may be regarded as a specialized form of an input outputinterface. Further, multiple network interfaces 1010 may be used toengage with various communications network types 1013. For example,multiple network interfaces may be employed to allow for thecommunication over broadcast, multicast, and/or unicast networks.

Input Output interfaces (I/O) 1008 may accept, communicate, and/orconnect to user input devices 1011, peripheral devices 1012,cryptographic processor devices 1028, and/or the like. I/O may employconnection protocols such as, but not limited to: audio: analog,digital, monaural, RCA, stereo, and/or the like; data: Apple Desktop Bus(ADB), IEEE 1394a-b, serial, universal serial bus (USB); infrared;joystick; keyboard; midi; optical; PC AT; PS/2; parallel; radio; videointerface: Apple Desktop Connector (ADC), BNC, coaxial, component,composite, digital, Digital Visual Interface (DVI), high-definitionmultimedia interface (HDMI), RCA, RF antennae, S-Video, VGA, and/or thelike; wireless: 802.11a/b/g/n/x, Bluetooth, code division multipleaccess (CDMA), global system for mobile communications (GSM), WiMax,etc.; and/or the like. One typical output device may include a videodisplay, which typically comprises a Cathode Ray Tube (CRT) or LiquidCrystal Display (LCD) based monitor with an interface (e.g., DVIcircuitry and cable) that accepts signals from a video interface, may beused. The video interface composites information generated by a computersystemization and generates video signals based on the compositedinformation in a video memory frame. Another output device is atelevision set, which accepts signals from a video interface. Typically,the video interface provides the composited video information through avideo connection interface that accepts a video display interface (e.g.,an RCA composite video connector accepting an RCA composite video cable;a DVI connector accepting a DVI display cable, etc.).

User input devices 1011 may be card readers, dongles, finger printreaders, gloves, graphics tablets, joysticks, keyboards, mouse (mice),remote controls, retina readers, trackballs, trackpads, and/or the like.

Peripheral devices 1012 may be connected and/or communicate to I/Oand/or other facilities of the like such as network interfaces, storageinterfaces, and/or the like. Peripheral devices may be audio devices,cameras, dongles (e.g., for copy protection, ensuring securetransactions with a digital signature, and/or the like), externalprocessors (for added functionality), goggles, microphones, monitors,network interfaces, printers, scanners, storage devices, video devices,video sources, visors, and/or the like.

It should be noted that although user input devices and peripheraldevices may be employed, the SNAM controller may be embodied as anembedded, dedicated, and/or monitor-less (i.e., headless) device,wherein access would be provided over a network interface connection.

Cryptographic units such as, but not limited to, microcontrollers,processors 1026, interfaces 1027, and/or devices 1028 may be attached,and/or communicate with the SNAM controller. A MC68HC16 microcontroller,manufactured by Motorola Inc., may be used for and/or withincryptographic units. The MC68HC16 microcontroller utilizes a 16-bitmultiply-and-accumulate instruction in the 16 MHz configuration andrequires less than one second to perform a 512-bit RSA private keyoperation. Cryptographic units support the authentication ofcommunications from interacting agents, as well as allowing foranonymous transactions. Cryptographic units may also be configured aspart of CPU. Equivalent microcontrollers and/or processors may also beused. Other commercially available specialized cryptographic processorsinclude: the Broadcom's CryptoNetX and other Security Processors;nCipher's nShield, SafeNet's Luna PCI (e.g., 7100) series; SemaphoreCommunications' 40 MHz Roadrunner 184; Sun's Cryptographic Accelerators(e.g., Accelerator 6000 PCIe Board, Accelerator 500 Daughtercard); ViaNano Processor (e.g., L2100, L2200, U2400) line, which is capable ofperforming 500+ MB/s of cryptographic instructions; VLSI Technology's 33MHz 6868; and/or the like.

Memory

Generally, any mechanization and/or embodiment allowing a processor toaffect the storage and/or retrieval of information is regarded as memory1029. However, memory is a fungible technology and resource, thus, anynumber of memory embodiments may be employed in lieu of or in concertwith one another. It is to be understood that the SNAM controller and/ora computer systemization may employ various forms of memory 1029. Forexample, a computer systemization may be configured wherein thefunctionality of on-chip CPU memory (e.g., registers), RAM, ROM, and anyother storage devices are provided by a paper punch tape or paper punchcard mechanism; of course such an embodiment would result in anextremely slow rate of operation. In a typical configuration, memory1029 will include ROM 1006, RAM 1005, and a storage device 1014. Astorage device 1014 may be any conventional computer system storage.Storage devices may include a drum; a (fixed and/or removable) magneticdisk drive; a magneto-optical drive; an optical drive (i.e., Blueray, CDROM/RAM/Recordable (R)/ReWritable (RW), DVD R/RW, HD DVD R/RW etc.); anarray of devices (e.g., Redundant Array of Independent Disks (RAID));solid state memory devices (USB memory, solid state drives (SSD), etc.);other processor-readable storage mediums; and/or other devices of thelike. Thus, a computer systemization generally requires and makes use ofmemory.

Component Collection

The memory 1029 may contain a collection of program and/or databasecomponents and/or data such as, but not limited to: operating systemcomponent(s) 1015 (operating system); information server component(s)1016 (information server); user interface component(s) 1017 (userinterface); Web browser component(s) 1018 (Web browser); database(s)1019; mail server component(s) 1021; mail client component(s) 1022;cryptographic server component(s) 1020 (cryptographic server); the SNAMcomponent(s) 1035; and/or the like (i.e., collectively a componentcollection). These components may be stored and accessed from thestorage devices and/or from storage devices accessible through aninterface bus. Although non-conventional program components such asthose in the component collection, typically, are stored in a localstorage device 1014, they may also be loaded and/or stored in memorysuch as: peripheral devices, RAM, remote storage facilities through acommunications network, ROM, various forms of memory, and/or the like.

Operating System

The operating system component 1015 is an executable program componentfacilitating the operation of the SNAM controller. Typically, theoperating system facilitates access of I/O, network interfaces,peripheral devices, storage devices, and/or the like. The operatingsystem may be a highly fault tolerant, scalable, and secure system suchas: Apple Macintosh OS X (Server); AT&T Nan 9; Be OS; Unix and Unix-likesystem distributions (such as AT&T's UNIX; Berkley Software Distribution(BSD) variations such as FreeBSD, NetBSD, OpenBSD, and/or the like;Linux distributions such as Red Hat, Ubuntu, and/or the like); and/orthe like operating systems. However, more limited and/or less secureoperating systems also may be employed such as Apple Macintosh OS, IBMOS/2, Microsoft DOS, Microsoft Windows2000/2003/3.1/95/98/CE/Millenium/NT/Vista/XP (Server), Palm OS, and/orthe like. An operating system may communicate to and/or with othercomponents in a component collection, including itself, and/or the like.Most frequently, the operating system communicates with other programcomponents, user interfaces, and/or the like. For example, the operatingsystem may contain, communicate, generate, obtain, and/or provideprogram component, system, user, and/or data communications, requests,and/or responses. The operating system, once executed by the CPU, mayenable the interaction with communications networks, data, I/O,peripheral devices, program components, memory, user input devices,and/or the like. The operating system may provide communicationsprotocols that allow the SNAM controller to communicate with otherentities through a communications network 1013. Various communicationprotocols may be used by the SNAM controller as a subcarrier transportmechanism for interaction, such as, but not limited to: multicast,TCP/IP, UDP, unicast, and/or the like.

Information Server

An information server component 1016 is a stored program component thatis executed by a CPU. The information server may be a conventionalInternet information server such as, but not limited to Apache SoftwareFoundation's Apache, Microsoft's Internet Information Server, and/or thelike. The information server may allow for the execution of programcomponents through facilities such as Active Server Page (ASP), ActiveX,(ANSI) (Objective−) C (++), C# and/or .NET, Common Gateway Interface(CGI) scripts, dynamic (D) hypertext markup language (HTML), FLASH,Java, JavaScript, Practical Extraction Report Language (PERL), HypertextPre-Processor (PHP), pipes, Python, wireless application protocol (WAP),WebObjects, and/or the like. The information server may support securecommunications protocols such as, but not limited to, File TransferProtocol (FTP); HyperText Transfer Protocol (HTTP); Secure HypertextTransfer Protocol (HTTPS), Secure Socket Layer (SSL), messagingprotocols (e.g., America Online (AOL) Instant Messenger (AIM),Application Exchange (APEX), ICQ, Internet Relay Chat (IRC), MicrosoftNetwork (MSN) Messenger Service, Presence and Instant Messaging Protocol(PRIM), Internet Engineering Task Force's (IETF's) Session InitiationProtocol (SIP), SIP for Instant Messaging and Presence LeveragingExtensions (SIMPLE), open XML-based Extensible Messaging and PresenceProtocol (XMPP) (i.e., Jabber or Open Mobile Alliance's (OMA's) InstantMessaging and Presence Service (IMPS)), Yahoo! Instant MessengerService, and/or the like. The information server provides results in theform of Web pages to Web browsers, and allows for the manipulatedgeneration of the Web pages through interaction with other programcomponents. After a Domain Name System (DNS) resolution portion of anHTTP request is resolved to a particular information server, theinformation server resolves requests for information at specifiedlocations on the SNAM controller based on the remainder of the HTTPrequest. For example, a request such ashttp://123.124.125.126/myInformation.html might have the IP portion ofthe request “123.124.125.126” resolved by a DNS server to an informationserver at that IP address; that information server might in turn furtherparse the http request for the “/myInformation.html” portion of therequest and resolve it to a location in memory containing theinformation “myInformation.html.” Additionally, other informationserving protocols may be employed across various ports, e.g., FTPcommunications across port 21, and/or the like. An information servermay communicate to and/or with other components in a componentcollection, including itself, and/or facilities of the like. Mostfrequently, the information server communicates with the SNAM database1019, operating systems, other program components, user interfaces, Webbrowsers, and/or the like.

Access to the SNAM database may be achieved through a number of databasebridge mechanisms such as through scripting languages as enumeratedbelow (e.g., CGI) and through inter-application communication channelsas enumerated below (e.g., CORBA, WebObjects, etc.). Any data requeststhrough a Web browser are parsed through the bridge mechanism intoappropriate grammars as required by the SNAM. In one embodiment, theinformation server would provide a Web form accessible by a Web browser.Entries made into supplied fields in the Web form are tagged as havingbeen entered into the particular fields, and parsed as such. The enteredterms are then passed along with the field tags, which act to instructthe parser to generate queries directed to appropriate tables and/orfields. In one embodiment, the parser may generate queries in standardSQL by instantiating a search string with the proper join/selectcommands based on the tagged text entries, wherein the resulting commandis provided over the bridge mechanism to the SNAM as a query. Upongenerating query results from the query, the results are passed over thebridge mechanism, and may be parsed for formatting and generation of anew results Web page by the bridge mechanism. Such a new results Webpage is then provided to the information server, which may supply it tothe requesting Web browser.

Also, an information server may contain, communicate, generate, obtain,and/or provide program component, system, user, and/or datacommunications, requests, and/or responses.

User Interface

The function of computer interfaces in some respects is similar toautomobile operation interfaces. Automobile operation interface elementssuch as steering wheels, gearshifts, and speedometers facilitate theaccess, operation, and display of automobile resources, functionality,and status. Computer interaction interface elements such as check boxes,cursors, menus, scrollers, and windows (collectively and commonlyreferred to as widgets) similarly facilitate the access, operation, anddisplay of data and computer hardware and operating system resources,functionality, and status. Operation interfaces are commonly called userinterfaces. Graphical user interfaces (GUIs) such as the Apple MacintoshOperating System's Aqua, IBM's OS/2, Microsoft's Windows2000/2003/3.1/95/98/CE/Millenium/NT/XP/Vista/7 (i.e., Aero), Unix'sX-Windows (e.g., which may include additional Unix graphic interfacelibraries and layers such as K Desktop Environment (KDE), mythTV and GNUNetwork Object Model Environment (GNOME)), web interface libraries(e.g., ActiveX, AJAX, (D)HTML, FLASH, Java, JavaScript, etc. interfacelibraries such as, but not limited to, Dojo, jQuery(UI), MooTools,Prototype, script.aculo.us, SWFObject, Yahoo! User Interface, any ofwhich may be used and) provide a baseline and means of accessing anddisplaying information graphically to users.

A user interface component 1017 is a stored program component that isexecuted by a CPU. The user interface may be a conventional graphic userinterface as provided by, with, and/or atop operating systems and/oroperating environments such as already discussed. The user interface mayallow for the display, execution, interaction, manipulation, and/oroperation of program components and/or system facilities through textualand/or graphical facilities. The user interface provides a facilitythrough which users may affect, interact, and/or operate a computersystem. A user interface may communicate to and/or with other componentsin a component collection, including itself, and/or facilities of thelike. Most frequently, the user interface communicates with operatingsystems, other program components, and/or the like. The user interfacemay contain, communicate, generate, obtain, and/or provide programcomponent, system, user, and/or data communications, requests, and/orresponses.

Web Browser

A Web browser component 1018 is a stored program component that isexecuted by a CPU. The Web browser may be a conventional hypertextviewing application such as Microsoft Internet Explorer or NetscapeNavigator. Secure Web browsing may be supplied with 128 bit (or greater)encryption by way of HTTPS, SSL, and/or the like. Web browsers allowingfor the execution of program components through facilities such asActiveX, AJAX, (D)HTML, FLASH, Java, JavaScript, web browser plug-inAPIs (e.g., FireFox, Safari Plug-in, and/or the like APIs), and/or thelike. Web browsers and like information access tools may be integratedinto PDAs, cellular telephones, and/or other mobile devices. A Webbrowser may communicate to and/or with other components in a componentcollection, including itself, and/or facilities of the like. Mostfrequently, the Web browser communicates with information servers,operating systems, integrated program components (e.g., plug-ins),and/or the like; e.g., it may contain, communicate, generate, obtain,and/or provide program component, system, user, and/or datacommunications, requests, and/or responses. Of course, in place of a Webbrowser and information server, a combined application may be developedto perform similar functions of both. The combined application wouldsimilarly affect the obtaining and the provision of information tousers, user agents, and/or the like from the SNAM enabled nodes. Thecombined application may be nugatory on systems employing standard Webbrowsers.

Mail Server

A mail server component 1021 is a stored program component that isexecuted by a CPU 1003. The mail server may be a conventional Internetmail server such as, but not limited to sendmail, Microsoft Exchange,and/or the like. The mail server may allow for the execution of programcomponents through facilities such as ASP, ActiveX, (ANSI) (Objective−)C (++), C# and/or .NET, CGI scripts, Java, JavaScript, PERL, PHP, pipes,Python, WebObjects, and/or the like. The mail server may supportcommunications protocols such as, but not limited to: Internet messageaccess protocol (IMAP), Messaging Application Programming Interface(MAPI)/Microsoft Exchange, post office protocol (POP3), simple mailtransfer protocol (SMTP), and/or the like. The mail server can route,forward, and process incoming and outgoing mail messages that have beensent, relayed and/or otherwise traversing through and/or to the SNAM.

Access to the SNAM mail may be achieved through a number of APIs offeredby the individual Web server components and/or the operating system.

Also, a mail server may contain, communicate, generate, obtain, and/orprovide program component, system, user, and/or data communications,requests, information, and/or responses.

Mail Client

A mail client component 1022 is a stored program component that isexecuted by a CPU 1003. The mail client may be a conventional mailviewing application such as Apple Mail, Microsoft Entourage, MicrosoftOutlook, Microsoft Outlook Express, Mozilla, Thunderbird, and/or thelike. Mail clients may support a number of transfer protocols, such as:IMAP, Microsoft Exchange, POP3, SMTP, and/or the like. A mail client maycommunicate to and/or with other components in a component collection,including itself, and/or facilities of the like. Most frequently, themail client communicates with mail servers, operating systems, othermail clients, and/or the like; e.g., it may contain, communicate,generate, obtain, and/or provide program component, system, user, and/ordata communications, requests, information, and/or responses. Generally,the mail client provides a facility to compose and transmit electronicmail messages.

Cryptographic Server

A cryptographic server component 1020 is a stored program component thatis executed by a CPU 1003, cryptographic processor 1026, cryptographicprocessor interface 1027, cryptographic processor device 1028, and/orthe like. Cryptographic processor interfaces will allow for expeditionof encryption and/or decryption requests by the cryptographic component;however, the cryptographic component, alternatively, may run on aconventional CPU. The cryptographic component allows for the encryptionand/or decryption of provided data. The cryptographic component allowsfor both symmetric and asymmetric (e.g., Pretty Good Protection (PGP))encryption and/or decryption. The cryptographic component may employcryptographic techniques such as, but not limited to: digitalcertificates (e.g., X.509 authentication framework), digital signatures,dual signatures, enveloping, password access protection, public keymanagement, and/or the like. The cryptographic component will facilitatenumerous (encryption and/or decryption) security protocols such as, butnot limited to: checksum, Data Encryption Standard (DES), EllipticalCurve Encryption (ECC), International Data Encryption Algorithm (IDEA),Message Digest 5 (MD5, which is a one way hash function), passwords,Rivest Cipher (RC5), Rijndael, RSA (which is an Internet encryption andauthentication system that uses an algorithm developed in 1977 by RonRivest, Adi Shamir, and Leonard Adleman), Secure Hash Algorithm (SHA),Secure Socket Layer (SSL), Secure Hypertext Transfer Protocol (HTTPS),and/or the like. Employing such encryption security protocols, the SNAMmay encrypt all incoming and/or outgoing communications and may serve asnode within a virtual private network (VPN) with a wider communicationsnetwork. The cryptographic component facilitates the process of“security authorization” whereby access to a resource is inhibited by asecurity protocol wherein the cryptographic component effects authorizedaccess to the secured resource. In addition, the cryptographic componentmay provide unique identifiers of content, e.g., employing and MD5 hashto obtain a unique signature for an digital audio file. A cryptographiccomponent may communicate to and/or with other components in a componentcollection, including itself, and/or facilities of the like. Thecryptographic component supports encryption schemes allowing for thesecure transmission of information across a communications network toenable the SNAM component to engage in secure transactions if sodesired. The cryptographic component facilitates the secure accessing ofresources on the SNAM and facilitates the access of secured resources onremote systems; i.e., it may act as a client and/or server of securedresources. Most frequently, the cryptographic component communicateswith information servers, operating systems, other program components,and/or the like. The cryptographic component may contain, communicate,generate, obtain, and/or provide program component, system, user, and/ordata communications, requests, and/or responses.

The SNAM Database

The SNAM database component 1019 may be embodied in a database and itsstored data. The database is a stored program component, which isexecuted by the CPU; the stored program component portion configuringthe CPU to process the stored data. The database may be a conventional,fault tolerant, relational, scalable, secure database such as Oracle orSybase. Relational databases are an extension of a flat file. Relationaldatabases consist of a series of related tables. The tables areinterconnected via a key field. Use of the key field allows thecombination of the tables by indexing against the key field; i.e., thekey fields act as dimensional pivot points for combining informationfrom various tables. Relationships generally identify links maintainedbetween tables by matching primary keys. Primary keys represent fieldsthat uniquely identify the rows of a table in a relational database.More precisely, they uniquely identify rows of a table on the “one” sideof a one-to-many relationship.

Alternatively, the SNAM database may be implemented using variousstandard data-structures, such as an array, hash, (linked) list, struct,structured text file (e.g., XML), table, and/or the like. Suchdata-structures may be stored in memory and/or in (structured) files. Inanother alternative, an object-oriented database may be used, such asFrontier, ObjectStore, Poet, Zope, and/or the like. Object databases caninclude a number of object collections that are grouped and/or linkedtogether by common attributes; they may be related to other objectcollections by some common attributes. Object-oriented databases performsimilarly to relational databases with the exception that objects arenot just pieces of data but may have other types of functionalityencapsulated within a given object. If the SNAM database is implementedas a data-structure, the use of the SNAM database 1019 may be integratedinto another component such as the SNAM component 1035. Also, thedatabase may be implemented as a mix of data structures, objects, andrelational structures. Databases may be consolidated and/or distributedin countless variations through standard data processing techniques.Portions of databases, e.g., tables, may be exported and/or imported andthus decentralized and/or integrated.

In one embodiment, the database component 1019 includes several tables1019 a-h. A UserProfiles table 1019 a may include fields such as, butnot limited to: user_ID, ssn, first_name, last_name, middle_name,suffix, prefix, address_first_line, address_second_line, city, state,zipcode, country, birth_date, gender, device_ID_list, device_name_list,device_type_list, hardware_configuration_list, software_apps_list,device_IP_list, device_MAC_list, device_preferences_list, and/or thelike. A Developers table 1019 b may include fields such as, but notlimited to: developer_ID, developer_name, developer_status,developer_team, developer_manager_list, developer_projects_list,developer_schedule, and/or the like. An Apps table 1019 c may includefields such as, but not limited to: app_ID, app_name, app_type,app_version, app_version_timestamp, app_prior_versions_list,app_prior_versions_timestamps, app_update_schedule,app_scheduled_versions_list, app_scheduled_versions_dates,app_scheduled_versions_priority, app_enviroment_type,app_envrionment_version, app_compatibilities_hw, app_compatibilities_sw,app_dependent_topology_tree, app_depend_module_list,app_depend_function_list, app_depend_apps_list, and/or the like. A Codetable 1019 d may include fields such as, but not limited to: code_ID,code_name, code_type, code_version, code_version_timestamp,code_prior_versions_list, code_prior_versions_timestamps,code_update_schedule, code_scheduled_versions_list,code_scheduled_versions_dates, code_scheduled_versions_priority,code_enviroment_type, code_envrionment_version, code_compatibilities_hw,code_compatibilities_sw, code_dependent_topology_tree,code_depend_module_list, code_depend_function_list,code_depend_codes_list, and/or the like. A Bundles table 1019 e mayinclude fields such as, but not limited to: bundle_ID, bundle_fields,bundle_string, bundle_host_api, bundle_register_timestamp,calling_module_ID_list, and/or the like. A Queues table 1019 f mayinclude fields such as, but not limited to: bundle_request_ID,bundle_request_fields, bundle_request_string, bundle_request_origin,calling_module_ID, bundle_request_timestamp, bundle_request_priority,bundle_request_queue_ID, bundle_register_attempts, bundle_host_api_name,and/or the like. A Trees table 1019 g may include fields such as, butnot limited to: code_ID_list, code_tree_position,code_tree_pointer_list, code_dependent_topology_tree,code_depend_module_list, code_depend_function_list,code_depend_codes_list, and/or the like. A Schedules table 1019 h mayinclude fields such as, but not limited to: app_update_schedule,app_scheduled_versions_list, app_scheduled_versions_dates,app_scheduled_versions_priority, and/or the like. A String Server table19 i may include fields such as, but not limited to: stringservers_list, string_servers_id, service_area_list, and/or the like. AHost Server 19 j may include fields such as, but not limited to: api_id,api_name, permissions_list, user_id, user_name, developer_id,developer_auth_md5, and/or the like. A Developer Server table 19 k mayinclude fields such as, but not limited to: developer_id,developer_name, developer_project, team_leader, project_manager_id,and/or the like. A Workstation table 19 l may include fields such as,but not limited to: programmer_id, programmer_name, programmer_projects,programmer_schedule, and/or the like. A Client table, 19 m, may includefields such as, but not limited to: user_id, user_name, client_id,client_type, language_pref, client_hardware_compatibilities,client_software_installations, and/or the like. A String table 19 n mayinclude fields such as, but not limited to: input_string, bundle_id,bundle_type, and/or the like. One or more of the tables discussed abovemay support and/or track multiple entity accounts on a SNAM.

In one embodiment, the SNAM database may interact with other databasesystems. For example, employing a distributed database system, queriesand data access by search SNAM component may treat the combination ofthe SNAM database, an integrated data security layer database as asingle database entity.

In one embodiment, user programs may contain various user interfaceprimitives, which may serve to update the SNAM. Also, various accountsmay require custom database tables depending upon the environments andthe types of clients the SNAM may need to serve. It should be noted thatany unique fields may be designated as a key field throughout. In analternative embodiment, these tables have been decentralized into theirown databases and their respective database controllers (i.e.,individual database controllers for each of the above tables). Employingstandard data processing techniques, one may further distribute thedatabases over several computer systemizations and/or storage devices.Similarly, configurations of the decentralized database controllers maybe varied by consolidating and/or distributing the various databasecomponents 1019 a-n. The SNAM may be configured to keep track of varioussettings, inputs, and parameters via database controllers.

The SNAM database may communicate to and/or with other components in acomponent collection, including itself, and/or facilities of the like.Most frequently, the SNAM database communicates with the SNAM component,other program components, and/or the like. The database may contain,retain, and provide information regarding other nodes and data.

The SNAMs

The SNAM component 1035 is a stored program component that is executedby a CPU. In one embodiment, the SNAM component incorporates any and/orall combinations of the aspects of the SNAM that was discussed in theprevious figures. As such, the SNAM affects accessing, obtaining and theprovision of information, services, transactions, and/or the like acrossvarious communications networks. The SNAM component enables livereconciliation of code updates to multi-user social networkingapplications in highly dynamic build environments, through various APIsand/or the like and use of the features and abilities of the SNAM. Inone embodiment, the SNAM component 1035 takes inputs (e.g., developercode updates (e.g., 311 a), application/code specifications (e.g., 404),user app requests (e.g., 229)) etc., and transforms the inputs viavarious components (e.g., the bundle request submission component 400 a,bundle registration request component 400 b, code module updatingcomponent 400 c, bundle request management component 500, module versioncheck component 700 a, module update component 700 b, dependent moduleselection component 700 d, application update deployment component 900,and/or the like), into outputs (e.g., app modules 228, bundle requests311 d, bundle register requests 311 e, bundle IDs 311 f, registeredbundle entries 311 g, updated code 311 h, updated apps, appdependencies, compatibilities, schedules, etc., 611 j), as shown inFIGS. 2-9C, as well as throughout the specification.

The SNAM component enabling access of information between nodes may bedeveloped by employing standard development tools and languages such as,but not limited to: Apache components, Assembly, ActiveX, binaryexecutables, (ANSI) (Objective−) C (++), C# and/or .NET, databaseadapters, CGI scripts, Java, JavaScript, mapping tools, procedural andobject oriented development tools, PERL, PHP, Python, shell scripts, SQLcommands, web application server extensions, web developmentenvironments and libraries (e.g., Microsoft's ActiveX; Adobe AIR, FLEX &FLASH; AJAX; (D)HTML; Dojo, Java; JavaScript; jQuery(UI); MooTools;Prototype; script.aculo.us; Simple Object Access Protocol (SOAP);SWFObject; Yahoo! User Interface; and/or the like), WebObjects, and/orthe like. In one embodiment, the SNAM server employs a cryptographicserver to encrypt and decrypt communications. The SNAM component maycommunicate to and/or with other components in a component collection,including itself, and/or facilities of the like. Most frequently, theSNAM component communicates with the SNAM database, operating systems,other program components, and/or the like. The SNAM may contain,communicate, generate, obtain, and/or provide program component, system,user, and/or data communications, requests, and/or responses.

Distributed SNAMs

The structure and/or operation of any of the SNAM node controllercomponents may be combined, consolidated, and/or distributed in anynumber of ways to facilitate development and/or deployment. Similarly,the component collection may be combined in any number of ways tofacilitate deployment and/or development. To accomplish this, one mayintegrate the components into a common code base or in a facility thatcan dynamically load the components on demand in an integrated fashion.

The component collection may be consolidated and/or distributed incountless variations through standard data processing and/or developmenttechniques. Multiple instances of any one of the program components inthe program component collection may be instantiated on a single node,and/or across numerous nodes to improve performance throughload-balancing and/or data-processing techniques. Furthermore, singleinstances may also be distributed across multiple controllers and/orstorage devices; e.g., databases. All program component instances andcontrollers working in concert may do so through standard dataprocessing communication techniques. For example, SNAM server(s) anddatabase(s) may all be localized within a single computing terminal. Asanother example, the SNAM components may be localized within one or moreentities (e.g., hospitals, pharmaceutical companies etc.) involved incoordinated patient management.

The configuration of the SNAM controller will depend on the context ofsystem deployment. Factors such as, but not limited to, the budget,capacity, location, and/or use of the underlying hardware resources mayaffect deployment requirements and configuration. Regardless of if theconfiguration results in more consolidated and/or integrated programcomponents, results in a more distributed series of program components,and/or results in some combination between a consolidated anddistributed configuration, data may be communicated, obtained, and/orprovided. Instances of components consolidated into a common code basefrom the program component collection may communicate, obtain, and/orprovide data. This may be accomplished through intra-application dataprocessing communication techniques such as, but not limited to: datareferencing (e.g., pointers), internal messaging, object instancevariable communication, shared memory space, variable passing, and/orthe like.

If component collection components are discrete, separate, and/orexternal to one another, then communicating, obtaining, and/or providingdata with and/or to other component components may be accomplishedthrough inter-application data processing communication techniques suchas, but not limited to: Application Program Interfaces (API) informationpassage; (distributed) Component Object Model ((D)COM), (Distributed)Object Linking and Embedding ((D)OLE), and/or the like), Common ObjectRequest Broker Architecture (CORBA), local and remote applicationprogram interfaces Jini, Remote Method Invocation (RMI), SOAP, processpipes, shared files, and/or the like. Messages sent between discretecomponent components for inter-application communication or withinmemory spaces of a singular component for intra-applicationcommunication may be facilitated through the creation and parsing of agrammar. A grammar may be developed by using standard development toolssuch as lex, yacc, XML, and/or the like, which allow for grammargeneration and parsing functionality, which in turn may form the basisof communication messages within and between components. For example, agrammar may be arranged to recognize the tokens of an HTTP post command,e.g.:

-   -   w3c -post http:// . . . Value1

where Value1 is discerned as being a parameter because “http://” is partof the grammar syntax, and what follows is considered part of the postvalue. Similarly, with such a grammar, a variable “Value1” may beinserted into an “http://” post command and then sent. The grammarsyntax itself may be presented as structured data that is interpretedand/or other wise used to generate the parsing mechanism (e.g., a syntaxdescription text file as processed by lex, yacc, etc.). Also, once theparsing mechanism is generated and/or instantiated, it itself mayprocess and/or parse structured data such as, but not limited to:character (e.g., tab) delineated text, HTML, structured text streams,XML, and/or the like structured data. In another embodiment,inter-application data processing protocols themselves may haveintegrated and/or readily available parsers (e.g., the SOAP parser) thatmay be employed to parse communications data. Further, the parsinggrammar may be used beyond message parsing, but may also be used toparse: databases, data collections, data stores, structured data, and/orthe like. Again, the desired configuration will depend upon the context,environment, and requirements of system deployment.

Non-limiting exemplary embodiments highlighting numerous furtheradvantageous aspects include:

A1. A processor-implemented API call abstraction method embodiment,comprising:

-   -   obtaining programming code for an application;    -   parsing the obtained programming code to identify instructions        in the programming code;    -   identifying an application programming interface call in the        programming code based on parsing the obtained programming code,        the application programming interface call including an input        string;    -   determining that the identified application programming        interface call requires a pre-registered bundle to replace the        input string; and    -   querying a database for the pre-registered bundle using the        input string.

A2. The method of embodiment A1, further comprising:

-   -   obtaining an indication that the pre-registered bundle is not        available;    -   providing a request to register a new bundle including the input        string, upon obtaining the indication that the pre-registered        bundle is not available; and    -   obtaining an indication that the new bundle has been registered.

A3. The method of embodiment A2, further comprising:

-   -   obtaining a bundle identification corresponding to the new        bundle, upon obtaining the indication that the bundle has been        registered; and    -   replacing the input string in the application programming        interface call with the bundle identification.

A4. The method of embodiment A1, wherein parsing the programming code,identifying the application programming interface call, determining thatthe identified application programming interface call requires thepre-registered bundle, and querying the database for the pre-registeredbundle are performed as the programming code is being obtained.

A5. The method of embodiment A1, wherein the application is a multi-userapplication accessible via a social networking service.

A6. The method of embodiment A3, further comprising:

-   -   compiling the programming code upon replacing the input string        in the application programming interface call with the bundle        identification;    -   obtaining the application based on compiling the programming        code; and    -   providing the compiled application for a user.

A7. The method of embodiment A3, further comprising:

-   -   storing the new bundle and the bundle identification        corresponding to the new bundle in the database.

A8. An API call abstraction system embodiment, comprising:

a processor; and

a memory disposed in communication with the processor and storingprocessor-executable instructions, the instructions comprisinginstructions to:

-   -   obtain programming code for an application;    -   parse the obtained programming code to identify instructions in        the programming code;    -   identify an application programming interface call in the        programming code based on parsing the obtained programming code,        the application programming interface call including an input        string;    -   determine that the identified application programming interface        call requires a pre-registered bundle to replace the input        string; and    -   query a database for the pre-registered bundle using the input        string.

A9. The system of embodiment A8, the instructions further comprisinginstructions to:

-   -   obtain an indication that the pre-registered bundle is not        available;    -   provide a request to register a new bundle including the input        string, upon obtaining the indication that the pre-registered        bundle is not available; and    -   obtain an indication that the new bundle has been registered.

A10. The system of embodiment A9, the instructions further comprisinginstructions to:

-   -   obtain a bundle identification corresponding to the new bundle,        upon obtaining the indication that the bundle has been        registered; and    -   replace the input string in the application programming        interface call with the bundle identification.

A11. The system of embodiment A8, wherein parsing the programming code,identifying the application programming interface call, determining thatthe identified application programming interface call requires thepre-registered bundle, and querying the database for the pre-registeredbundle are performed as the programming code is being obtained.

A12. The system of embodiment A8, wherein the application is amulti-user application accessible via a social networking service.

A13. The system of embodiment A10, the instructions further comprisinginstructions to:

-   -   compile the programming code upon replacing the input string in        the application programming interface call with the bundle        identification;    -   obtain the application based on compiling the programming code;        and    -   provide the compiled application for a user.

A14. The system of embodiment A10, the instructions further comprisinginstructions to:

-   -   store the new bundle and the bundle identification corresponding        to the new bundle in the database.

A15. A processor-readable medium embodiment storing processor-executableAPI call abstraction instructions, the instructions comprisinginstructions to:

-   -   obtain programming code for an application;    -   parse the obtained programming code to identify instructions in        the programming code;    -   identify an application programming interface call in the        programming code based on parsing the obtained programming code,        the application programming interface call including an input        string;    -   determine that the identified application programming interface        call requires a pre-registered bundle to replace the input        string; and    -   query a database for the pre-registered bundle using the input        string.

A16. The medium of embodiment A15, the instructions further comprisinginstructions to:

-   -   obtain an indication that the pre-registered bundle is not        available;    -   provide a request to register a new bundle including the input        string, upon obtaining the indication that the pre-registered        bundle is not available; and    -   obtain an indication that the new bundle has been registered.

A17. The medium of embodiment A16, the instructions further comprisinginstructions to:

-   -   obtain a bundle identification corresponding to the new bundle,        upon obtaining the indication that the bundle has been        registered; and    -   replace the input string in the application programming        interface call with the bundle identification.

A18. The medium of embodiment A15, wherein parsing the programming code,identifying the application programming interface call, determining thatthe identified application programming interface call requires thepre-registered bundle, and querying the database for the pre-registeredbundle are performed as the programming code is being obtained.

A19. The medium of embodiment A15, wherein the application is amulti-user social networking application.

A20. The medium of embodiment A17, the instructions further comprisinginstructions to:

-   -   compile the programming code upon replacing the input string in        the application programming interface call with the bundle        identification;    -   obtain the application based on compiling the programming code;        and    -   provide the compiled application for a user.

A21. The medium of embodiment A17, the instructions further comprisinginstructions to:

-   -   store the new bundle and the bundle identification corresponding        to the new bundle in the database.

B1. A processor-implemented application updating method embodiment,comprising:

-   -   obtaining an indication to check whether to generate an updated        version of an application;    -   obtaining a module dependency graph for a current version of the        application;    -   identifying current module version numbers for one or more        modules in the module dependency graph for the current version        of the application;    -   obtaining, for the modules in the module dependency graph,        module version numbers for updated module versions stored in a        code database;    -   obtaining compatibility specifications for the current version        of the application and the updated module versions stored in the        code database;    -   analyzing the compatibility specifications for the current        version of the application and the updated module versions; and    -   determining that the updated version of the application can be        generated using the updated module versions stored in the code        database, based on analyzing the compatibility specifications        for the current version of the application and the updated        module versions.

B2. The method of embodiment B1, further comprising:

-   -   obtaining an updated module version for one of the modules in        the module dependency graph of the current version of the        application; and    -   generating the updated version of the application using the        obtained updated module version.

B3. The method of embodiment B1, wherein identifying the current moduleversion numbers for the one or more modules in the module dependencygraph for the current version of the application includes:

-   -   obtaining the current version of the application;    -   parsing the obtained current version of the application; and    -   determining the module dependency graph of the current version        of the application based on parsing the current version of the        application.

B4. The method of embodiment B1, wherein the application is a multi-userapplication accessible via a social networking service.

B5. The method of embodiment B1, wherein the compatibilityspecifications include information on at least one of: hardwarerequirements; operating system requirements; and web browserrequirements.

B6. The method of embodiment B2, further comprising:

-   -   providing a notification for a user of the generated updated        version of the application;    -   obtaining an indication to provide the updated version of the        application for the user; and    -   providing the updated version of the application for the user.

B7. The method of embodiment B6, further comprising:

-   -   obtaining an indication that the updated version of the        application replaced the current version of the application on a        user device as the user was using the application on the user        device.

B8. An application updating system embodiment, comprising:

a processor; and

a memory disposed in communication with the processor and storingprocessor-executable instructions, the instructions comprisinginstructions to:

-   -   obtain an indication to check whether to generate an updated        version of an application;    -   obtain a module dependency graph for a current version of the        application;    -   identify current module version numbers for one or more modules        in the module dependency graph for the current version of the        application;    -   obtain, for the modules in the module dependency graph, module        version numbers for updated module versions stored in a code        database;    -   obtain compatibility specifications for the current version of        the application and the updated module versions stored in the        code database;    -   analyze the compatibility specifications for the current version        of the application and the updated module versions; and    -   determine that the updated version of the application can be        generated using the updated module versions stored in the code        database, based on analyzing the compatibility specifications        for the current version of the application and the updated        module versions.

B9. The system of embodiment B8, the instructions further comprisinginstructions to:

-   -   obtain an updated module version for one of the modules in the        module dependency graph of the current version of the        application; and    -   generate the updated version of the application using the        obtained updated module version.

B10. The system of embodiment B8, wherein the instructions to identifythe current module version numbers for the one or more modules in themodule dependency graph for the current version of the applicationinclude instructions to:

-   -   obtain the current version of the application;    -   parse the obtained current version of the application; and    -   determine the module dependency graph of the current version of        the application based on parsing the current version of the        application.

B11. The system of embodiment B8, wherein the application is amulti-user application accessible via a social networking service.

B12. The system of embodiment B8, wherein the compatibilityspecifications include information on at least one of: hardwarerequirements; operating system requirements; and web browserrequirements.

B13. The system of embodiment B9, the instructions further comprisinginstructions to:

-   -   provide a notification for a user of the generated updated        version of the application;    -   obtain an indication to provide the updated version of the        application for the user; and    -   provide the updated version of the application for the user.

B14. The system of embodiment B13, the instructions further comprisinginstructions to:

-   -   obtain an indication that the updated version of the application        replaced the current version of the application on a user device        as the user was using the application on the user device.

B15. A processor-readable medium embodiment storing processor-executableapplication updating instructions, the instructions comprisinginstructions to:

-   -   obtain an indication to check whether to generate an updated        version of an application;    -   obtain a module dependency graph for a current version of the        application;    -   identify current module version numbers for one or more modules        in the module dependency graph for the current version of the        application;    -   obtain, for the modules in the module dependency graph, module        version numbers for updated module versions stored in a code        database;    -   obtain compatibility specifications for the current version of        the application and the updated module versions stored in the        code database;    -   analyze the compatibility specifications for the current version        of the application and the updated module versions; and    -   determine that the updated version of the application can be        generated using the updated module versions stored in the code        database, based on analyzing the compatibility specifications        for the current version of the application and the updated        module versions.

B16. The system of embodiment B15, the instructions further comprisinginstructions to:

-   -   obtain an updated module version for one of the modules in the        module dependency graph of the current version of the        application; and    -   generate the updated version of the application using the        obtained updated module version.

B17. The medium of embodiment B15, wherein the instructions to identifythe current module version numbers for the one or more modules in themodule dependency graph for the current version of the applicationinclude instructions to:

-   -   obtain the current version of the application;    -   parse the obtained current version of the application; and    -   determine the module dependency graph of the current version of        the application based on parsing the current version of the        application.

B18. The medium of embodiment B15, wherein the application is amulti-user application accessible via a social networking service.

B19. The medium of embodiment B15, wherein the compatibilityspecifications include information on at least one of: hardwarerequirements; operating system requirements; and web browserrequirements.

B20. The medium of embodiment B16, the instructions further comprisinginstructions to:

-   -   provide a notification for a user of the generated updated        version of the application;    -   obtain an indication to provide the updated version of the        application for the user; and    -   provide the updated version of the application for the user.

B21. The medium of embodiment B20, the instructions further comprisinginstructions to:

-   -   obtain an indication that the updated version of the application        replaced the current version of the application on a user device        as the user was using the application on the user device.

In order to address various issues and improve over the prior art, theinvention is directed to APPARATUSES, METHODS AND SYSTEMS FOR AN APICALL ABSTRACTOR. The entirety of this application (including the CoverPage, Title, Headings, Field, Background, Summary, Brief Description ofthe Drawings, Detailed Description, Claims, Abstract, Figures,Appendices and/or otherwise) shows by way of illustration variousembodiments in which the claimed inventions may be practiced. Theadvantages and features of the application are of a representativesample of embodiments only, and are not exhaustive and/or exclusive.They are presented only to assist in understanding and teach the claimedprinciples. It should be understood that they are not representative ofall claimed inventions. As such, certain aspects of the disclosure havenot been discussed herein. That alternate embodiments may not have beenpresented for a specific portion of the invention or that furtherundescribed alternate embodiments may be available for a portion is notto be considered a disclaimer of those alternate embodiments. It will beappreciated that many of those undescribed embodiments incorporate thesame principles of the invention and others are equivalent. Thus, it isto be understood that other embodiments may be utilized and functional,logical, organizational, structural and/or topological modifications maybe made without departing from the scope and/or spirit of thedisclosure. As such, all examples and/or embodiments are deemed to benon-limiting throughout this disclosure. Also, no inference should bedrawn regarding those embodiments discussed herein relative to those notdiscussed herein other than it is as such for purposes of reducing spaceand repetition. For instance, it is to be understood that the logicaland/or topological structure of any combination of any programcomponents (a component collection), other components and/or any presentfeature sets as described in the figures and/or throughout are notlimited to a fixed operating order and/or arrangement, but rather, anydisclosed order is exemplary and all equivalents, regardless of order,are contemplated by the disclosure. Furthermore, it is to be understoodthat such features are not limited to serial execution, but rather, anynumber of threads, processes, services, servers, and/or the like thatmay execute asynchronously, concurrently, in parallel, simultaneously,synchronously, and/or the like are contemplated by the disclosure. Assuch, some of these features may be mutually contradictory, in that theycannot be simultaneously present in a single embodiment. Similarly, somefeatures are applicable to one aspect of the invention, and inapplicableto others. In addition, the disclosure includes other inventions notpresently claimed. Applicant reserves all rights in those presentlyunclaimed inventions including the right to claim such inventions, fileadditional applications, continuations, continuations in part,divisions, and/or the like thereof. As such, it should be understoodthat advantages, embodiments, examples, functional, features, logical,organizational, structural, topological, and/or other aspects of thedisclosure are not to be considered limitations on the disclosure asdefined by the claims or limitations on equivalents to the claims. It isto be understood that, depending on the particular needs of the SNAMand/or characteristics of the hardware, software, network framework,monetization model and/or the like, various embodiments of the SNAM maybe implemented that enable a great deal of flexibility andcustomization. It is to be understood that, depending on the particularneeds of the SNAM and/or characteristics of the hardware, software,network framework, monetization model and/or the like, variousembodiments of the SNAM may be implemented that enable a great deal offlexibility and customization. The instant disclosure discusses exampleimplementations of the SNAM within the context of multi-user gamingapplications. However, it is to be understood that the system describedherein can be readily configured for a wide range of other applicationsand/or implementations. For example, implementations of the SNAM can beconfigured to operate within the context of blogging, micro-blogging,professional networking, and/or the like. Alternate implementations ofthe system may be utilized in various contexts outside socialnetworking, including, but not limited to, officeproductivity/collaboration software, distributed online advertising,networked surveillance systems, sensor networks, and/or the like. It isto be understood that the SNAM may be further adapted to otherimplementations and/or software management.

1. A method for selecting modules for an application update, comprisingoperations of: initializing a set of modules for an application withtheir most updated versions; and iterating through operations of:obtaining specification attributes for an updated version of theapplication; obtaining specification attributes for each module;comparing specification attributes of the modules with specificationattributes of the application to identify incompatible specificationattributes; identifying the least compatible module; and replacing theleast compatible module with a version of the module that results fromdecrementing a version number for the module, until there are no moreincompatible specification attributes, wherein the operations areexecuted by one or more processors.
 2. The method of claim 1, whereinthe least compatible module is the module having the most incompatiblespecification attributes.
 3. The method of claim 1, wherein thespecification attributes include names of modules referenced.
 4. Themethod of claim 1, wherein the specification attributes include versionsof modules referenced.
 5. The method of claim 1, wherein thespecification attributes include application programming interfaces(APIs) called.
 6. The method of claim 1, wherein the specificationattributes include an operating system.
 7. The method of claim 1,wherein the specification attributes include a version of an operatingsystem.
 8. A system for selecting modules for an application update,comprising: one or more processors; and a memory disposed incommunication with the one or more processors and storingprocessor-executable instructions, the instructions comprisinginstructions to: initialize a set of modules for an application withtheir most updated versions; and iterate through operations of:obtaining specification attributes for an updated version of theapplication; obtaining specification attributes for each module;comparing specification attributes of the modules with specificationattributes of the application to identify incompatible specificationattributes; identifying the least compatible module; and replacing theleast compatible module with a version of the module that results fromdecrementing a version number for the module, until there are no moreincompatible specification attributes.
 9. The system of claim 8, whereinthe least compatible module is the module having the most incompatiblespecification attributes.
 10. The system of claim 8, wherein thespecification attributes include names of modules referenced.
 11. Thesystem of claim 8, wherein the specification attributes include versionsof modules referenced.
 12. The system of claim 8, wherein thespecification attributes include application programming interfaces(APIs) called.
 13. The system of claim 8, wherein the specificationattributes include an operating system.
 14. A medium that isprocessor-readable and non-transitory storing processor-executableinstructions, the instructions comprising instructions to: initialize aset of modules for an application with their most updated versions; anditerate through operations of: obtaining specification attributes for anupdated version of the application; obtaining specification attributesfor each module; comparing specification attributes of the modules withspecification attributes of the application to identify incompatiblespecification attributes; identifying the least compatible module; andreplacing the least compatible module with a version of the module thatresults from decrementing a version number for the module, until thereare no more incompatible specification attributes.
 15. The medium ofclaim 14, wherein the least compatible module is the module having themost incompatible specification attributes.
 16. The medium of claim 14,wherein the specification attributes include names of modulesreferenced.
 17. The medium of claim 14, wherein the specificationattributes include versions of modules referenced.
 18. The medium of 14,wherein the specification attributes include application programminginterfaces (APIs) called.
 19. The medium of 14, wherein thespecification attributes include an operating system.
 20. The medium ofclaim 14, wherein the specification attributes include a version of anoperating system.